Validation 用户输入的值在JSF中验证后消失

Validation 用户输入的值在JSF中验证后消失,validation,jsf,jsf-2,Validation,Jsf,Jsf 2,我的页面中有h:selectOneMenu组件。用户必须在此处选择“是”或“否”,初始值为空(标记为“未知”)。在bean中,它是布尔值,所以null是可能的。如果用户选择有效值,例如“是”,点击Next,true保存在bean中 现在用户可以返回此页面,并选择“未知”,该值无效。当用户点击Next now时,将显示错误消息。这是可以的,但值被更改为“是”。它是从bean更新的。通过这种方式,它可以更改用户输入的内容,这不是必需的行为。有可能保留用户的价值吗 <h:form id="co"

我的页面中有h:selectOneMenu组件。用户必须在此处选择“是”或“否”,初始值为空(标记为“未知”)。在bean中,它是布尔值,所以null是可能的。如果用户选择有效值,例如“是”,点击Next,
true
保存在bean中

现在用户可以返回此页面,并选择“未知”,该值无效。当用户点击Next now时,将显示错误消息。这是可以的,但值被更改为“是”。它是从bean更新的。通过这种方式,它可以更改用户输入的内容,这不是必需的行为。有可能保留用户的价值吗

<h:form id="co">
  <h:selectOneMenu id="isCeded"
                   value="#{bean.boolValue}"
                   required="true"
                   requiredMessage="#{msgs.please_select_value}">
    <f:selectItem itemLabel="#{msgs.unknown}"/>
    <f:selectItem itemValue="true" itemLabel="#{msgs.yes}"/>
    <f:selectItem itemValue="false" itemLabel="#{msgs.no}"/>
    <f:ajax execute="@this" render="isCededMsg"/>
  </h:selectOneMenu>*
  <h:message id="isCededMsg" for="isCeded" errorClass="invalid"/>

  <h:commandButton id="submit" value="Next" action="#{bean.submit}" />
</h:form>

*

奇怪的是,只有当用户在null不是有效值的字段中输入null时,才会发生这种行为。例如,如果用户在某个已验证的文本字段中输入另一个无效值(例如,20位,仅允许10位),则在单击“下一步”后,用户输入的无效值将保留。只有错误消息出现。

这似乎是一个bug,看起来无法修复。参见本问题中提到的JIRA链接:

问题和JIRA问题都有解决办法。您需要扩展MenuRender并使用JIRA问题末尾提到的修补代码覆盖renderOption方法