2013-05-04 26 views
0

我正在使用PrimeFaces的JSF將應用程序作爲大學的作業。我努力工作。我正在使用PrimeFaces,並且我有一個包含5個選項卡的tabview。在其中一個選項卡中,我有一個包含多行和多列的dataTable。這一切工作正常,但問題是我想提交表單而不重新渲染(整個頁面)。問題是,dataTable中的每一列都有一個selectBooleanCheckbox,當選中該複選框時,一個按鈕應該消失。如果未選中,則應顯示該按鈕。這可以正常工作onchange =「this.form.submit()」或onclick =「this.form.submit()」,但它會刷新整個應用程序,並導致選擇第一個選項卡,而不是我選擇的那個在。所以我正在尋找一種解決方案,能夠提交和重新渲染一些東西,而無需刷新整個程序。這是我的代碼:如何使用selectBooleanCheckbox提交JSF PrimeFaces表單而不刷新頁面?

<body> 
    <h:form id="customerForm"> 
     <p:dataTable id="customerlist" var="c" value="#{customerBean.customerList}"> 
      <p:column> 
       <f:facet name="header">Select</f:facet> 
       <center> 
        <p:selectBooleanCheckbox value="#{c.selected}" onchange="this.form.submit()"/> 
       </center> 
      </p:column> 
     </p:dataTable> 
     <h:commandButton id="testtest" value="test" rendered="#{customerBean.numberSelected() == 0}"/> 
    </h:form> 
</body> 

爲了簡單起見,我刪除了大部分列。這有什麼解決辦法?我用ajax嘗試過,但沒有奏效

<p:selectBooleanCheckbox value="#{c.selected}"> 
    <f:ajax event="click" execute="@form" render="@none"/> 
</p:selectBooleanCheckbox> 
+0

在您的''嘗試中,您指定了'render =「@ none」'。爲什麼你期望在ajax請求完成時* something *會被重新渲染(更新)?我建議通過[本文](http://balusc.blogspot.com/2011/09/communication-in-jsf-20.html)掌握一些基礎知識。 – BalusC 2013-05-04 23:35:43

+0

重點不在於重新呈現頁面。這只是我絕望之後嘗試過的與ajax相關的事情之一。 – ZimZim 2013-05-05 07:56:34

回答

1

你真的需要提交整個形式?如果足夠讓視圖重新渲染,請嘗試更新表單。爲此,您可以使用primefaces ajax事件。

<p:selectBooleanCheckbox value="#{c.selected}"> 
    <p:ajax update="@form"/> 
</p:selectBooleanCheckbox> 

如果這不起作用,請告訴我們「..ajax,沒有工作」的意思。有沒有提交POST請求?是否有任何動作/二傳手叫?

+0

我不知道你表演的是什麼樣的魔法......但是那個伎倆......我以爲我嘗試了一切。非常感謝! – ZimZim 2013-05-04 16:50:50

+0

使用'update =「包裝面板組中的按鈕:customerForm:panelGroupId」'會更高效。 OP似乎也不想更新整個表格。 – BalusC 2013-05-04 23:33:51