JSF selectManyListbox 显示值绑定错误
Posted
技术标签:
【中文标题】JSF selectManyListbox 显示值绑定错误【英文标题】:JSF selectManyListbox shows error of value binding 【发布时间】:2017-02-07 10:31:39 【问题描述】:我在 JSP 中使用 JSF 标记 h:selectManyListbox 来显示来自 bean 的项目列表。
<h:selectManyListbox value="#settingsBean.statusIds" style="width: 100%; height: 200px;">
<f:selectItem value="#settingsBean.statusItems" />
</h:selectManyListbox>
statusItems 对象在以下 bean 类中定义:
SettingsBean.java
public class SettingsBean
private List<String> statusIds;
private List<SelectItem> statusItems;
public SettingsBean()
initStatus();
private void initStatus()
statusItems = new ArrayList<SelectItem>();
statusItems.add(new SelectItem("v1", "lbl1"));
statusItems.add(new SelectItem("v2", "lbl2"));
statusItems.add(new SelectItem("v3", "lbl3"));
public ArrayList getStatusItems()
return getStatusItemsList(false);
@SuppressWarnings("unchecked")
private ArrayList getStatusItemsList(boolean selected)
ArrayList ids = new ArrayList();
if (!selected)
boolean inSelIds = false;
for (int i=0; i < statusItems.size(); i++)
inSelIds = false;
SelectItem item = (SelectItem)statusItems.get(i);
if (selected==inSelIds)
String text = item.getLabel();
//ids.add(text);
ids.add(new SelectItem(item.getValue(), text));
return ids;
但我在加载时收到一条错误消息:
HTTP Status 500 - java.lang.IllegalArgumentException: Value binding '#settingsBean.statusItems' of UISelectItem : Component-Path : [Class: javax.faces.component.UIViewRoot,ViewId: /jsp/Settings.jsp][Class: javax.faces.component.html.HtmlSelectManyListbox,Id: _id3][Class: javax.faces.component.UISelectItem,Id: _id4] does not reference an Object of type SelectItem
我应该遗漏什么或导致此问题?谢谢你的帮助
【问题讨论】:
这是一种对象问题,您使用的是一种数据类型而不是其他类型的数据 【参考方案1】:在 JSF 中,我们有两个不同的标签 selectItem
和 selectItems
。 selectItem
用于显示单个项目,尽管我们可以使用多个 selectItem
标签来显示多个值。但是如果我们有一个selectItems
的列表,那么我们应该使用selectItems
而不是selectItem
。所以用selectItems
替换XHTML 上的selectItem
标签,如下所示:
<h:selectManyListbox value="#settingsBean.statusIds" style="width: 100%; height: 200px;">
<f:selectItems value="#settingsBean.statusItems" />
</h:selectManyListbox>
【讨论】:
@NJ Francisco:你是否为 statusIds 生成了 Setter/Getter?【参考方案2】:您的绑定不太正确。在这种情况下,您需要使用 Collection 或 Array,如示例中所示: https://www.tutorialspoint.com/jsf/jsf_selectmanylistbox_tag.htm
此外,您应该考虑替换
中的 value="value" 属性<f:selectItem value="#settingsBean.statusItems" />
收件人:
<f:selectItem itemValue="#settingsBean.statusItems" />
【讨论】:
以上是关于JSF selectManyListbox 显示值绑定错误的主要内容,如果未能解决你的问题,请参考以下文章
JSF 2.0 和 selectManyListbox 中的生命周期问题
让 JSF 将 selectManyListbox 值的选定项设置为 List 或 Collection 而不是数组
带有转换器的 JSF selectManyListBox 不起作用