【发布时间】:2014-02-19 15:29:09
【问题描述】:
我已经阅读了一些关于此的现有帖子。没有一个适合我的情况。
在我的程序中,我使用了一堆 h:selectOneMenu,它们都工作得很好。除了这个特定的 h:selectOneMenu,如果我选择一个 特定选项,我会得到一个“taskForm:taskDropDown: Validation Error: Value is not valid”
代码是:
<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.allTaskNames”是一个字符串数组。这是我检查调试窗口时包含的内容:
[确定适当的测试/覆盖范围,在 Selenium 中为确定的 UI 测试构建脚本,在 SOATest 服务测试中确定的构建脚本,确定执行脚本的适当时间,确定适当的报告指标,修改仪表板以运行预定测试,确定新数据库存储常见的测试结果,为 IMPACT 自动化设计新的 Web UI,在数据库中实现报告,为 IMPACT 自动化构建新的 Web UI,ytugjkh]
如果我选择“为 IMPACT 自动化构建新的 Web UI”选项,则会发生错误并且不会调用 ajax 部分。
通常由于以下两个原因之一发生错误:
对象的“equal”方法被破坏。我用的是String,所以equal()应该没问题。
数据的值发生了变化。也可能不是这种情况,因为该数组仅填充一次并且不再更改。此外,数组中的其他选项也可以正常工作。
【问题讨论】:
-
确保
fetchQuery.taskName和getInitiative.allTaskNames中的元素属于同一类型。 -
@LuiggiMendoza allTaskNames 是 String[] 类型。并且 fetchQuery.taskName 是字符串类型。他们匹配。 (除了这个特定选项之外,其他选项都可以正常工作。)
-
这种情况只发生在此选项或您选择的第一个选项上?
-
@LuiggiMendoza 只有当我选择该选项时才会发生错误,这是倒数第二个选项。选项按调试窗口中显示的顺序排列。
-
您使用的是哪个 JSF 版本和实现?
标签: validation jsf selectonemenu