0

我需要使用 h:selectOneMenu 可以根据 bean 参数显示项目。因此,如果用户具有“管理员”角色,则第一项应为“管理员”,第二项应为“用户”,反之亦然。这是我的代码示例

<h:selectOneMenu id="role" value="#{adminBean.role}">
    <h:panelGroup rendered="#{adminBean.role == 'User'}" >
        <f:selectItem itemLabel="User" itemValue="User"/>
        <f:selectItem itemLabel="Admin" itemValue="Admin"/>
    </h:panelGroup>
    <h:panelGroup rendered="#{adminBean.role == 'Admin'}" >
        <f:selectItem itemLabel="Admin" itemValue="Admin"/>
        <f:selectItem itemLabel="User" itemValue="User"/>
    </h:panelGroup>
</h:selectOneMenu> 

但是此代码根本不起作用,所选列表完全为空

4

3 回答 3

1

这是实现它的一种方法,使用两个f:selectItem并根据条件交替它们的值

<h:selectOneMenu id="role" value="#{adminBean.role}">
    <f:selectItem itemLabel="#{(adminBean.role == 'User')?'User':'Admin'}" 
        itemValue="#{(adminBean.role == 'User')?'User':'Admin'}"/>
    <f:selectItem itemLabel="#{(adminBean.role == 'User')?'Admin':'User'}" 
        itemValue="#{(adminBean.role == 'User')?'Admin':'User'}"/>
</h:selectOneMenu> 
于 2013-02-28T11:16:44.793 回答
0

试试这个方法,希望有效

<c:set var="role" value="${adminBean.role}"/>
 <c:choose><c:when test="${role eq "User" }" >
   <h:selectOneMenu id="role" value="#{adminBean.role}"  >
           <f:selectItem itemLabel="Admin" itemValue="Admin"/>
           <f:selectItem itemLabel="User" itemValue="User"/>
   </h:selectOneMenu>
</c:when></c:choose>

你可以添加一个类似的条件Admin

于 2013-02-28T10:37:40.827 回答
0

PostConstruct 解决方案

<f:selectItems value="#{adminBean.options}">

.

@PostConstruct
public void postConstruct(){
    this.role = loggedInUser.getRole();
    this.options = service.getOptionsByRole(role);
}

public List<SelectItem> getOptions() {
    return options;
}

单行 if-else 语句解决方案

<f:selectItems value="#{adminBean.role == 'User' ? adminBean.userOptions : adminBean.adminOptions}">

参数传递解决方案

<f:selectItems value="#{adminBean.getOptionsByRole(adminBean.role)">

.

public List<SelectItem> getOptions(String role) {

    if (role.equals("User")) {
        return userOptions;
    }

    return adminOptions;
}

条件 getter 方法(不推荐)

<f:selectItems value="#{adminBean.options">

.

public List<SelectItem> getOptions() {

    if (role.equals("User")) {
        return userOptions;
    }

    return adminOptions;
}
于 2013-02-28T11:54:27.553 回答