gpt4 book ai didi

带有 SelectItems 的 JSF 2.0 selctOneMenu

转载 作者:行者123 更新时间:2023-12-05 00:38:06 26 4
gpt4 key购买 nike

我是 JSF 技术的新手,目前在我们的项目中,我们正在使用带有 spring 和 hibernate 集成的 JSF 2.0。我对 h:selectOneMenu 和 f:selectItems 有一个疑问。
从数据库中,我得到了一个 UserBeans 列表。我正在使用类似

<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 的列表。
在 View 页面中它显示正确,但是当我选择一个项目并单击提交按钮时,它在支持 bean 中显示所选用户为 NULL。

我的疑问是我只能为 f:selectItems 或任何其他 bean 列表传递 SelectItem 对象列表 ..??

除了 SelectItem 之外,还有其他方法可以填充 UserBeans 列表。

谢谢你们,
阿尼尔

最佳答案

您已将用户 ID 设置为选择项的值,但您似乎正在尝试绑定(bind) value一个完全值得的User bean 中的属性。您需要将其绑定(bind)为用户 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, UIComponent component, Object value) {
return String.valueOf(((User) value).getId());
}

}

然而,这是一项相当昂贵的工作。我建议坚持传递 ID 并在 bean 的操作方法中获取真正的用户一次,而不是让转换器为每个项目执行此操作。

关于带有 SelectItems 的 JSF 2.0 selctOneMenu,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6137421/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com