<h:selectonemenu>只有一个选项提供“验证错误:值无效”</h:selectonemenu>

时间:2014-02-19 15:29:10

标签: validation jsf selectonemenu

我已经阅读了一些关于此的帖子。没有人适合我的情况。

在我的程序中,我使用了一堆h:selectOneMenu,它们都运行得很好。除了针对这一个特定的h:selectOneMenu,如果我选择一个特定选项,我会得到一个“taskForm:taskDropDown:验证错误:值无效”

代码是:

<h:selectOneMenu id="taskDropDown" value="#{fetchQuery.taskName}">
    <f:selectItem itemValue="" itemLabel="Select.." />
    <f:selectItems value="#{getInitiative.allTaskNames}" var="t"
        itemLabel="#{t}" itemValue="#{t}" />
    <f:ajax listener="#{getInitiative.taskChosen()}" immediate="false" />
</h:selectOneMenu>

这里,“getInitiative.allTask​​Names”是一个String数组。这是我检查调试窗口时包含的内容:

  

[确定适当的测试/覆盖范围,在Selenium中构建脚本以识别UI测试,在SOATest服务测试中识别构建脚本,确定执行脚本的适当时间,识别适当的报告指标,修改仪表板以运行计划的测试,识别新数据库存储常见测试结果,为IMPACT自动化设计新的Web UI,在数据库中实现报告,为IMPACT自动化构建新的Web UI,ytugjkh]

如果我选择“为IMPACT自动化构建新的Web UI”选项,则会发生错误并且不会引发ajax部分。

通常由于以下两个原因之一而发生错误:

对象的“等于”方法被破坏。我正在使用String,所以equal()应该没问题。

数据的值已更改。这也许不是这种情况,因为数组只填充一次而不再更改。此外,阵列中的其他选项正常工作。

1 个答案:

答案 0 :(得分:0)

当所选值不在selectOneMenu中存在的值列表中时,可能会发生这种情况。当该值的内部转换不同时,可能会发生这种情况,就像在DataBase中存储该数据时可能包含不需要的字符一样。只需在调试模式下打开JSF页面(显示两个属性值submittedValue和导致错误的值),找到导致问题的值,并在数据库中再次手动更改值并进行检查。它可能有用。