您已設置用戶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