selectOneMenu上是否只接受true?

时间:2011-09-12 12:37:23

标签: java jsf-2

我有这个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:验证错误:值无效”

  • 为什么Jsf2.0只接受true作为有效的awnser而不是false?
  • 有办法解决这个问题吗?或者我必须编写自定义验证器吗?

1 个答案:

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