您已设置用户ID作为选择项目的价值,但你似乎是试图将value
绑定到bean中的fullworthy User
属性。您需要将其绑定为用户标识。
<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, UIComponent component, Object value) {
return String.valueOf(((User) value).getId());
}
}
然而,这是一个非常昂贵的工作。我建议坚持传递ID,并在bean的action方法中获取真正的用户一次,而不是让转换器为每个项目执行此操作。
请仅分享一点点代码。 – 2011-05-26 10:57:58
编辑你的问题不要发表评论与代码。 – 2011-05-26 11:00:18
谢谢....克雷姆 – Anil 2011-05-26 11:04:00