我在Tomcat 7上使用带有Primefaces 4的JSF 2.2 我有一个表单,其中需要某些字段取决于复选框的值。因此,在下面的示例中,仅当选中复选框时(默认情况下),才需要字段集中的字段:
<h:form id="formId">
...
<p:selectBooleanCheckbox id="fieldId1" value="#{myBean.firm}">
<p:ajax event="change" process="@this :formId:fieldsetId" update="@this :formId:fieldsetId"/>
</p:selectBooleanCheckbox>
...
<p:fieldset id="fieldsetId">
<p:inputText id="field2" value="#{myBean.field2Value}" required="#{myBean.firm}"/>
<p:inputText id="field3" value="#{myBean.field3Value}" required="#{myBean.firm}"/>
</p:fieldset>
</h:form>
我的问题是ajax请求通过了验证,因此当我取消选中该复选框时,如果未填充,则验证会在inputFields上失败,并且模型不会更新。
所以我的属性 firm 在 myBean 中仍然设置为true,我的inputText字段仍然是必需的。
起初我忘了处理字段集
<p:ajax event="change" process="@this" update="@this :formId:fieldsetId"/>
这很有用,或者我可以,但由于字段未处理,如果我在取消选中该框之前填写了一些字段,则所有数据都会丢失。在这种情况下,设置immediate =“true”将不起作用。
在我看来,这是一个非常简单和常见的用例,我无法相信没有解决方案。
由于
答案 0 :(得分:0)
HY,
<h:form id="formId">
...
<p:selectBooleanCheckbox id="fieldId1" value="#{myBean.firm}">
<f:ajax listener="#{bean.checkBoxListener}" immediate="true" update=":formId:fieldsetId" />
</p:selectBooleanCheckbox>
...
<p:fieldset id="fieldsetId">
<p:inputText id="field2" value="#{myBean.field2Value}" required="#{myBean.firm}"/>
<p:inputText id="field3" value="#{myBean.field3Value}" required="#{myBean.firm}"/>
</p:fieldset>
</h:form>
在bean中
public void checkBoxListener(ValueChangeEvent event) {
this.firm = (Boolean) ((UIInput) event.getComponent()).getValue();
}