无法使用 RequestScoped bean 填充 Select 元素? [复制]
Posted
技术标签:
【中文标题】无法使用 RequestScoped bean 填充 Select 元素? [复制]【英文标题】:Failing to populate Select element using RequestScoped bean? [duplicate] 【发布时间】:2018-06-30 10:24:03 【问题描述】:我一直在为一项看似非常简单的任务而苦苦挣扎,但不知何故,如果不使用一些非常老套的代码,我就无法找到解决它的方法——我真的想避免这种情况。
问题本身已简化为一项非常简单的任务:我有一个项目,其中包含一个包含表单的单页,我必须在其中键入非空用户名并使用选择元素 (h:selectOneMenu) 来选择一个此用户的“用户组”。这将提交给我拥有的 RequestScoped bean(这也是我在项目中拥有的唯一 bean)。唯一的验证规则(为了简化我的解释)是:“用户名”字段不能为空。
这是我页面的代码:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
xmlns:f="http://xmlns.jcp.org/jsf/core"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:p="http://xmlns.jcp.org/jsf/passthrough">
<h:head></h:head>
<h:body>
<f:metadata>
<f:event listener="#userManagementBean.initializeGroupsList()" type="preRenderView" />
</f:metadata>
<h:form>
<h:inputText id="fieldUsername" value="#userManagementBean.user.username" p:placeholder="Username" required="true" />
<h:message for="fieldUsername"/>
<h:selectOneMenu id="fieldGroup" value="#userManagementBean.usergroup_id">
<f:selectItem itemValue="#null" itemLabel="Please, select a group" />
<f:selectItems value="#userManagementBean.groupsList" var="curGroup" itemLabel="#curGroup.groupName" itemValue="#curGroup.id" />
</h:selectOneMenu>
<h:message for="fieldGroup"/>
<h:commandButton action="#userManagementBean.submitValues()" value="Submit data" />
</h:form>
</h:body>
</html>
这是 bean 的代码,它初始化了一个包含选择框元素的列表:
import java.io.Serializable;
import java.util.List;
import javax.enterprise.context.RequestScoped;
import javax.inject.Named;
....
@RequestScoped
@Named
public class UserManagementBean implements Serializable
// PRIVATE FIELDS
private User user = new User();
private List<UserGroup> groupsList;
private Integer usergroup_id;
// BEAN'S PUBLIC METHODS
public void initializeGroupsList()
groupsList = loadAllGroupsFromDatabase();
System.out.print(String.format("%d groups have been loaded\n", groupsList.size()));
// Getters, setters and database-loading code has been ommited
...
问题是:我应该何时/如何初始化用于填充页面上的选择元素的用户组列表?
首先,我尝试使用一个
其次,我尝试将
目前我正在通过删除
那么我应该如何调用 initializeGroupsList(),以避免在第一种和第二种情况中描述的这些错误,同时允许我访问 initializeGroupsList() 中的 URL 查询字符串参数强>?
提前致谢。
【问题讨论】:
【参考方案1】:继续使用@PostConstruct 来初始化initializeGroupsList()。
关于视图参数,您可以使用来自 ominifaces 的 @Param (http://showcase.omnifaces.org/cdi/Param),它会为您注入它们,而无需使用视图操作或视图事件。
【讨论】:
以上是关于无法使用 RequestScoped bean 填充 Select 元素? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
在 WildFly 上重新部署后,CDI 无法在 @Requestscoped REST 服务中将 @Singleton 设置为 @Provider