2011-10-18 25 views
1

我在JSF 2.0中有很多文本(標籤)和複選框。提交時文本從不更新,但複選框的值確實如此。如何ajax只呈現輸入而不是整個表單?

例如:

<h:form> 

    <h:outputLabel value="bla bla bla bla .. X 1000" id="lab1"> 
    <h:selectBooleanCheckbox for="lab1"> 

    <h:outputLabel value="bla bla bla bla .. X 1000" id="lab2"> 
    <h:selectBooleanCheckbox for="lab2"> 

    .... many more labels and checkboxes ... 

    <h:commandButton> 
     <f:ajax render="@form" execute="@form" /> 
    </h:commandButton>  

</h:form> 

的問題是,每當我做了提交,整個表單內容被重新呈現。我想只是複選框值重新呈現。這可以節省90%的請求大小。

是否有解決此問題的好方法?

回答

1

render屬性接受空格分隔的多個組件ID的字符串。您可以在render屬性中指定所需輸入的組件ID,而不是整個@form

你的看法標記是無效的(看起來像你的輸入id困惑標籤for),但到了點就應該是這樣的:

<h:outputLabel value="bla bla bla bla .. X 1000" for="lab1"> 
<h:selectBooleanCheckbox id="lab1"> 

<h:outputLabel value="bla bla bla bla .. X 1000" for="lab2"> 
<h:selectBooleanCheckbox id="lab2"> 

.... many more labels and checkboxes ... 

<h:commandButton> 
    <f:ajax execute="@form" render="lab1 lab2 lab3 lab4 ..." /> 
</h:commandButton>  

注意,它接受一個EL表達式爲好。如果這是一個動態生成的表單和/或ID和複選框的數量在bean事先知道,那麼你應該能夠使用類似:

<f:ajax execute="@form" render="#{bean.allCheckboxIds}" /> 
+0

謝謝!我混淆了屬性(僅作爲示例編寫)。 – Ben

+0

說,我可以在render屬性中使用JAVASCRIPT表達式嗎? (是的,我會自動構建一個javascript var,其中包含表單中所有複選框和輸入的ID) – Ben

+0

不,您不能。這完全是服務器端的評估。如果你想從管理bean中分離責任並以其他形式重用它,你最好可以爲它創建一個自定義的EL函數。或者可能創建一個自定義的ajax標籤,但這並不是微不足道的。 – BalusC

相關問題