我的页面中有h:selectOneMenu组件。用户必须在那里选择“是”或“否”,初始值为空(标记为“未知”)。在bean中它是布尔值,因此null是可能的。如果用户选择有效值,例如“是”,点击下一步,true
保存在bean中。
现在,用户可以返回此页面,然后选择“未知”,这不是有效值。当用户现在点击Next时,会显示错误消息。没关系,但是值变为“是”。它是从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个)用户输入的无效值在单击“下一步”后仍然存在。只有错误消息显示。
答案 0 :(得分:0)
这似乎是一个错误,看起来不像是固定的。请参阅此问题中提到的JIRA链接:h:selectOneMenu with Please select displays previous selection on validation error
问题和JIRA问题有解决方案。您需要扩展MenuRenderer并使用JIRA问题末尾提到的修补代码覆盖renderOption方法。