当验证失败时,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将是最好的,因为我对客户端和服务器上的一致值状态没有任何问题,因为实际上没有执行任何操作(由验证声明)。
答案 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>