我有这个selectOneMenu要求的东西,默认值是空的,因为人们需要考虑问题,实际上需要填写它。
<h:selectOneMenu id="fileSecurity" value="#{flowScope.application.fileSecurity}" required="true" >
<f:selectItem itemLabel="" itemValue="" noSelectionOption="true"/>
<f:selectItem itemLabel="ja" itemValue="true" />
<f:selectItem itemLabel="nee" itemValue="false" />
</h:selectOneMenu>
这就是我所拥有的,现在当你填写它给出的空值时:“managementTabs:ApplicationManagementForm:fileSecurity:需要填写。” 这是对的。
当我点击是或真值时,它接受anwser。
但是当我点击否或假时它会给出: “managementTabs:ApplicationManagementForm:fileSecurity:验证错误:值无效”
答案 0 :(得分:4)
似乎提交的false
值在某种程度上与noSelectionOption
的空字符串值冲突。第1项的以下条目可以正常工作:
<f:selectItem itemLabel="" itemValue="" />
和
<f:selectItem itemLabel="" noSelectionOption="true" />
和
<f:selectItem itemLabel="" itemValue="#{null}" noSelectionOption="true" />
我只是不明白为什么。这是不合逻辑的。要找到真正的答案,我需要运行调试器。
更新:我调试了SelectUtils#valueIsNoSelectionOption()
(Mojarra)的罪魁祸首。 noSelectionOption
的空字符串被强制转换为boolean false
而不是Boolean null
,因此与提交的值的比较有效,因此所选值无效。这是“按设计”。您确实需要明确指定itemValue="#{null}"
。