如何解决具有SelectItems的JSF 2.0 selctOneMenu
|| 我是JSF技术的新手,目前在我们的项目中,我们使用的是带有Spring和Hibernate集成的JSF 2.0。对于h:selectOneMenu和f:selectItems,我有一个疑问。 从数据库中,我获得了UserBeans列表。我正在使用like<h:selectOneMenu id=\"users\" value=\"#{MyBean.user}\">
<f:selectItems value=\"#{MyBean.userList}\" var=\"user\" itemLabel=\"#{user.userName}\" itemValue=\"#{user.userId}\" />
</h:selectOneMenu>
这里的user是UserBean类型,而userList是UserBeans的列表。
在视图页面中,它可以正确显示,但是当我选择一项并单击“提交”按钮时,在支持bean中,它将所选用户显示为NULL。
我的疑问是我只能为f:selectItems或任何其他bean列表传递SelectItem对象的列表。
除了SelectItem的SelectItem之外,还有其他方法可以填充UserBeans列表。
谢谢你们,
安尼尔
解决方法
您已经将用户ID设置为选择项的值,但是您似乎正在尝试将ѭ1绑定到Bean中的完全值
User
属性。您需要将其绑定为用户ID。
<h:selectOneMenu id=\"users\" value=\"#{MyBean.userId}\">
<f:selectItems value=\"#{MyBean.userList}\" var=\"user\" itemLabel=\"#{user.userName}\" itemValue=\"#{user.userId}\" />
</h:selectOneMenu>
如果您唯一的意图是能够选择并设置User
而不是仅设置ID,那么您需要Converter
在User
和String
之间进行转换。那是因为HTTP / HTML无法理解Java对象。它只了解字符串。这是一个启动示例:
<h:selectOneMenu id=\"users\" value=\"#{MyBean.user}\">
<f:selectItems value=\"#{MyBean.userList}\" var=\"user\" itemLabel=\"#{user.userName}\" itemValue=\"#{user}\" />
</h:selectOneMenu>
与
@FacesConverter(forClass=User.class)
public class UserConverter implements Converter {
@Override
public Object getAsObject(FacesContext context,UIComponent component,String value) {
try {
return userService.findById(Long.valueOf(value));
} catch (SomeException e) {
throw new ConverterException(new FacesMessage(String.format(\"Cannot convert %s to User\",value)),e);
}
}
@Override
public String getAsString(FacesContext context,Object value) {
return String.valueOf(((User) value).getId());
}
}
但是,这是一项非常昂贵的工作。我建议坚持传递ID并仅在bean的action方法中获得真实用户,而不是让转换器对每个项目都做一次。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。