2013-02-28 47 views
0

我需要使用h:selectOneMenu,它可以顯示依賴於bean params的項目。 所以如果用戶有「管理」角色,第一項應該是「管理員」,第二項是「用戶」,反之亦然。 這裏是我的代碼示例如何重新排列h:selectOneMenu中的項目,具體取決於條件

<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> 

但是這個代碼不工作的時候,選擇的名單完全是空的

+0

'param'從哪裏來?這是一張地圖嗎? – Daniel 2013-02-28 10:00:21

+0

這是我的最終代碼,但它不起作用。我只需要2個選擇,但它顯示出4 的 \t \t \t \t \t的 \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t的 \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t 2013-02-28 10:12:06

回答

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> 
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> 

U可以添加類似的條件爲Admin

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; 
} 

Conditinal getter方法(不推薦)

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

public List<SelectItem> getOptions() { 

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

    return adminOptions; 
}