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



当验证失败时,JSF bean通常不会更新,这在某些情况下会导致非常难看的效果,例如,当使用facet="output" of 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>

输出facet定义了inplace标签,这些标签应该是本地化的,而不是标准的:

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

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

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

我自己还没有试过,但给我一个机会:

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

相关内容

  • 没有找到相关文章

最新更新