3

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

现在用户可以返回此页面,并选择“未知”,这是一个无效的值。当用户现在点击下一步时,会显示错误消息。没关系,但是值会更改为“是”。它是从 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 位),则用户输入的无效值在单击“下一步”后仍然存在。只有错误消息出现。

4

1 回答 1

0

这似乎是一个错误,看起来不像得到修复。请参阅此问题中提到的 JIRA 链接:h:selectOneMenu with Please select 显示验证错误时的先前选择

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

于 2013-08-02T20:00:18.043 回答