即使验证失败,也要更新JSF bean?

时间:2014-05-06 09:41:57

标签: validation jsf primefaces

当验证失败时,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";
}

但是,当验证失败时,inplace输出facet显示复选框的旧值,而不是实际值。如果单击它,将显示实际值。

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

1 个答案:

答案 0 :(得分:0)

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

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