我在JSF 2.0中有一个带有大量文本(标签)和复选框的表单。文本永远不会在提交时更新,但复选框值会更新。
例如:
<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%的请求大小。
这个问题有一个很好的解决方案吗?
答案 0 :(得分:1)
render
属性接受以空格分隔的多个组件ID字符串。您可以在render
属性中指定所需输入的组件ID,而不是整个@form
。
您的视图标记无效(看起来您将标签for
与输入id
混淆),但到目前为止它应如下所示:
<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表达式。如果这是一个动态生成的表单和/或预先在bean中知道ID和复选框的数量,那么你应该可以使用类似的东西:
<f:ajax execute="@form" render="#{bean.allCheckboxIds}" />