【问题标题】:Field required depending on the value of an other field with JSF2 / PF4 [duplicate]所需的字段取决于具有 JSF2 / PF4 的其他字段的值 [重复]
【发布时间】:2014-06-25 09:46:08
【问题描述】:

我在 Tomcat 7 上使用 JSF 2.2 和 Primefaces 4。
我有一个表单,其中需要某些字段,具体取决于复选框的值。所以在下面的例子中,字段集中的字段只有在复选框被选中时才需要(默认情况下):

<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 未填写,则验证失败,并且模型未更新。
所以我的属性 firmmyBean 中仍然设置为 true,并且我的 inputText 字段仍然是必需的。

一开始我忘了处理字段集

<p:ajax event="change" process="@this" update="@this :formId:fieldsetId"/>

这有效,或者我虽然有效,但由于未处理该字段,如果我在取消选中该框之前填写了一些字段,则所有数据都丢失了。在这种情况下,设置 immediate="true" 也不起作用。

在我看来这是一个非常简单和常见的用例,我不敢相信没有解决方案。

谢谢

【问题讨论】:

  • 谢谢@BalusC,成功了!也非常感谢您的所有精彩回复和教程!

标签: jsf primefaces tomcat7 jsf-2.2


【解决方案1】:

喂,

<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>

在豆子里

public void checkBoxListener(ValueChangeEvent event) {
    this.firm = (Boolean) ((UIInput) event.getComponent()).getValue();
}

【讨论】:

  • 如果您无法在头脑中编写代码,请实际运行并测试它,然后再将其作为答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-21
  • 1970-01-01
  • 2020-06-03
相关资源
最近更新 更多