【发布时间】: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 查询字符串参数强>?
提前致谢。
【问题讨论】:
标签: jsf initialization selectonemenu