【发布时间】:2012-07-12 21:14:08
【问题描述】:
我有一个标准的 JSF h:form,其中包含一个 h:SelectOneMenu 控件。只要我从呈现页面时填充的列表中选择一个项目,它就可以完美地工作。我认为这并不重要,但将其放在上下文中,选择的值用于构建返回匹配记录列表的查询。
我已经在控件上实现了 JQuery 自动完成框,只要我选择其中一个原始值,它仍然可以正常工作。
当我在呈现页面时输入一个不在选择控件中的值时,就会出现问题。我使用 JQuery 进行了设置,以便当输入不在列表中的值时,将该值作为新选项添加到选择中。
我可以验证该选项是否已添加到底层选择控件,并通过 javascript 进行选择。但是,当在这之后立即在支持 bean 中调用 setter 时,传入 setter 的值为 null,并且永远不会到达运行查询的函数。 AJAX 响应中返回以下错误,但我还没有找到验证值的位置。它也不是必填字段。
验证错误:值无效
这是我的前端代码:
<h:selectOneMenu id="make" styleClass="combobox" value="#{listBean.make}"
effect="fade" label="#{listBean.makeLabel}" >
<f:selectItems value="#{listBean.makeList}" />
</h:selectOneMenu>
还有 bean 中的 setter:
public void setMake(String make) {
this.make = make;
}
我猜我只需要找到一种方法将新选项包含在支持 bean 的 makeList 列表中,但我不知道该怎么做。任何帮助或建议将不胜感激。
Java EE 6、GlassFish 3.1、Eclipse 3.7 - 在 FireFox 和 Chrome 上都观察到问题
【问题讨论】:
-
这是一个 List
,其中包含 SelectItems 的 ArrayList -
我没有使用过SelectItem(我已经通过了bean)。您能否将值
make也设为 SelectItem? -
看起来这行不通...转换错误为“空转换器”设置值“Acme”。我输入了“Acme”作为新值。现有值也不适用。
-
对不起,想了想,我认为这不是问题。在我的项目中遇到了同样的错误,但正如我所说,我直接使用了 bean。这意味着我必须指定一个 Converter,因此,当将值传递给支持 bean 时,它可以将从 select 作为 HTTP 请求中的参数传递的 String 转换回有效的 bean。因为
make已经是一个字符串,所以没有必要。我不能再帮忙了