绕过UIInput组件的JSF验证

时间:2010-12-13 23:25:23

标签: validation jsf jsf-2

问题在于,JSF验证会将字段翻转回上一个已知值。

我们正在编辑一个支持bean已经有值的页面。 (频率=“每周”)

我们需要显示“请选择..”的默认值,即使该值不会通过验证(是的,我只是想让用户留在页面上并显示错误消息)。

有没有办法让用户选择“选择..”而不是将其重置为最后一个好价值?

用户不会被允许明显保存,但我们想要选择无效值。

  1. 用户添加新对象,从下拉列表中选择适当的值
  2. 用户成功保存。
  3. 用户点击“编辑”并显示具有已知值的对象(“每周”)
  4. 用户将“每周”更改为“选择”
  5. 用户点击保存
  6. 显示验证消息(好),但频率会回到上一个值“每周”(不好,我需要它继续“请选择..”并让用户手动修复下拉菜单。
  7. immediate =“true”对inputComponents不起作用,只对commandComponents起作用。

1 个答案:

答案 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" />

额外的好处是最终用户可以获得即时反馈,这对用户体验更有利。