问题在于,JSF验证会将字段翻转回上一个已知值。
我们正在编辑一个支持bean已经有值的页面。 (频率=“每周”)
我们需要显示“请选择..”的默认值,即使该值不会通过验证(是的,我只是想让用户留在页面上并显示错误消息)。
有没有办法让用户选择“选择..”而不是将其重置为最后一个好价值?
用户不会被允许明显保存,但我们想要选择无效值。
immediate =“true”对inputComponents不起作用,只对commandComponents起作用。
答案 0 :(得分:3)
我认识到这一点,我在一年多前就已经报告过JSF issue 1299。由于优先级较低,因此仍未解决。这不是特定于所有UIInput
组件,而是特定于负责呈现HTML MenuRenderer
元素的<select>
。所有其他HTML输入元素的行为与您期望的一样,提交的值将被重新显示(好吧,实际上没有任何内容)。
由于您已经使用过JSF 2.0,我建议您在f:ajax
的帮助下解决此问题,以便不会重新呈现下拉列表,从而保持其选择。
<h:selectOneMenu id="frequency" value="#{bean.frequency}" required="true">
<f:selectItems value="#{bean.frequencies}" />
<f:ajax render="frequencyMessage" />
</h:selectOneMenu>
<h:message id="frequencyMessage" for="frequency" />
额外的好处是最终用户可以获得即时反馈,这对用户体验更有利。