【问题标题】:Update the JSF bean even if the validation fails?即使验证失败也要更新 JSF bean?
【发布时间】:2014-05-06 09:41:56
【问题描述】:

JSF bean 通常不会在验证失败时更新,这在某些情况下会导致非常丑陋的效果,例如,当使用 facet="output"p:inplace 时:

<h:form>
<h:panelGrid id="panel" columns="3" cellpadding="2">
  <p:outputLabel value="My Field" for="myfield" />
  <p:inputText id="myfield" value="#{test.myField}" required="true" />
  <p:message for="myfield" />

  <h:outputText value="Checkbox: " />
  <p:inplace id="checkboxInplace" effect="none">
    <f:facet name="output">#{test.myBooleanText}</f:facet>
    <f:facet name="input">
      <h:selectBooleanCheckbox value="#{test.myBoolean}" />
    </f:facet>
  </p:inplace>
  <p:spacer />
</h:panelGrid>

<p:commandButton id="refresh" icon="ui-icon-refresh" update="panel" process="@form"/>
</h:form>

输出方面定义了就地标签,应该本地化而不是标准标签:

private boolean myBoolean;

public String getMyBooleanText() {
    return myBoolean ? "Ja" : "Nein";
}

但是,当验证失败时,就地输出方面会显示复选框的旧值,而不是实际值。如果单击它,则会显示实际值。

如何解决该问题并正确实现输出?将值提交给 bean 将是最好的,因为我对客户端和服务器上的值的一致状态没有问题,只要实际不执行任何操作(由验证断言)。

【问题讨论】:

    标签: validation jsf primefaces


    【解决方案1】:

    我自己没有尝试过,但是给这个机会:

    <p:inplace id="checkboxInplace" effect="none">
        <f:facet name="output">#{test.myBoolean ? 'Ja' : 'Nein'}</f:facet>
        <f:facet name="input">
            <h:selectBooleanCheckbox value="#{test.myBoolean}" immediate="true">
                <p:ajax update="@parent" />
            <h:selectBooleanCheckbox />
        </f:facet>
    </p:inplace>
    

    【讨论】:

    • 是一样的。 EL 不会重新执行,但输入的值会保留在客户端。
    • 如果删除构面会发生什么?就地选择布尔值。
    • 实际上,如果没有一个方面,它就无法正常工作。它总是显示空标签...
    猜你喜欢
    • 2010-10-19
    • 1970-01-01
    • 1970-01-01
    • 2013-04-17
    • 1970-01-01
    • 1970-01-01
    • 2011-02-11
    • 1970-01-01
    • 2014-06-10
    相关资源
    最近更新 更多