【问题标题】:<h:selectOneMenu> only one of the option gives "validation Error: value is not valid" [duplicate]<h:selectOneMenu> 只有一个选项给出“验证错误:值无效”[重复]
【发布时间】: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.allTask​​Names”是一个字符串数组。这是我检查调试窗口时包含的内容:

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

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

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

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

数据的值发生了变化。也可能不是这种情况,因为该数组仅填充一次并且不再更改。此外,数组中的其他选项也可以正常工作。

【问题讨论】:

  • 确保fetchQuery.taskNamegetInitiative.allTaskNames 中的元素属于同一类型。
  • @LuiggiMendoza allTask​​Names 是 String[] 类型。并且 fetchQuery.taskName 是字符串类型。他们匹配。 (除了这个特定选项之外,其他选项都可以正常工作。)
  • 这种情况只发生在此选项或您选择的第一个选项上?
  • @LuiggiMendoza 只有当我选择该选项时才会发生错误,这是倒数第二个选项。选项按调试窗口中显示的顺序排列。
  • 您使用的是哪个 JSF 版本和实现?

标签: validation jsf selectonemenu


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2012-07-28
    • 1970-01-01
    • 2011-10-29
    • 2013-01-06
    • 2012-05-23
    • 2011-09-13
    • 2012-05-13
    • 2013-04-09
    • 1970-01-01
    相关资源
    最近更新 更多