1

我在创建/编辑表单上有这样的东西:

<h:selectOneMenu value="#{bean.value}" required="true" ... >
  <f:selectItem itemLabel="-- Select --" itemValue=""/>
  <f:selectItems .../>
</h:selectOneMenu>

在创建新对象的情况下,required验证按预期工作。

在编辑对象的情况下,如果我将有效值更改为占位符“-- 选择--”,我会收到验证失败 w/预期的 requiredMessage,因为 itemValue 是空白(“”);但是,HTML<select>将恢复为已从 bean 中选择的任何选项,而不是保留来自表单提交的无效用户输入。

重申一下,required=trueonh:selectOneMenu本身可以正常工作,生成预期的消息 - 唯一错误的是值恢复为 bean 值,而不是保留空白提交值。(我通过 Chrome 开发人员工具栏确认确实为 POST 发布了一个空字符串<select>。)

为什么会这样?更准确地说,为什么h:selectOneMenu不表现得像h:inputTextUIInput 显示来自表单的无效用户输入,并且不从 bean 刷新其值?这两个控件都扩展了相同的 UIInput 基类并实现了 EditableValueHolder,因此我希望它们的生命周期表现相同。

另外,澄清一下,我在 web.xml 中的任何地方都没有INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL上下文参数。

这是 Mojarra 2.1.3 / Glassfish 3.1.1 上的 JSF 应用程序。

4

0 回答 0