Jsf:验证错误,SelectOneMenu的值无效

7

我有一个selectMenu,其中包含在处理程序中定义的(SelectItems)列表,如下所示

Handler { List(SelectItem) stateList; State state; }
State { String stateCd; }

JSF 代码:

<h:selectOneMenu value="#{state.stateCode}">
  <f:selectItems value="#{handler.stateList}">
</h:selectOneMenu>

现在我的列表在requestScope中,我看到提交的值是字符串并且存在于列表中,但我仍然收到“验证错误:值无效”的消息。有人可以帮忙吗?

1个回答

32

验证错误:值无效

这意味着所选项与列表中的任何一个项目都不匹配。也就是说,对于任何项,stateCode.equals(stateList.get(i)) 从未返回 true

在验证阶段,当 stateList 为空或值类型的 equals() 方法没有被(正确)实现时,可能会发生这种情况。

另请参见:


感谢BalusC的回复,我正在onPreRender()中加载init()列表,并且该列表在请求范围内。我在保存时遇到了这个错误,这可能是错误的原因,如果可以的话,您能否建议我如何修复它,除了保持在会话范围内?谢谢。 - ccp_123
要么加载逻辑有误,要么equals()没有(正确)实现。只有您可以找出问题所在。请对表单提交进行调试。 - BalusC
我看到在Validate方法中,列表是空的,但在页面加载时,列表被创建并处于请求范围内,那么为什么列表会为空呢?对我来说,在会话范围内维护它来解决这个问题是没有意义的。 - ccp_123
2
您需要在 bean 的构建过程中或使用 @PostConstruct 准备好列表。我不知道 onPreRender() 是在做什么,它不是标准的 JSF,但听起来好像是在渲染响应阶段完成工作,那时已经为时过晚了。 - BalusC

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接