我在创建/编辑表单上有类似的内容:
<h:selectOneMenu value="#{bean.value}" required="true" ... >
<f:selectItem itemLabel="-- Select --" itemValue=""/>
<f:selectItems .../>
</h:selectOneMenu>
在创建新对象的情况下,required
验证按预期工作。
在编辑对象的情况下,如果我将有效值更改为占位符“ - 选择 - ”,我会得到验证失败w / expected requiredMessage,因为itemValue为空(“”); 然而,HTML <select>
将恢复为已从bean中选择的任何选项,而不是保留表单提交中的无效用户输入。
重申一下,required=true
本身上的h:selectOneMenu
工作正常,生成预期的消息 - 唯一错误的是恢复到bean值的值,而不是保留空白提交的值。 (我在Chrome开发人员工具栏中确认,<select>
确实发布了一个空字符串。)
为什么会这样?更确切地说,为什么h:selectOneMenu
的行为不像h:inputText
,其中UIInput从表单中显示无效的用户输入,并且不会从bean刷新其值?这两个控件都扩展了相同的UIInput基类并实现了EditableValueHolder,因此我希望它们的生命周期表现相同。
另外,为了澄清,我在web.xml中的任何地方都没有INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL
上下文参数。
这是Mojarra 2.1.3 / Glassfish 3.1.1上的JSF应用程序。