如何使用PrimeFaces SelectOneMenu ItemLabel&带有列表的ItemValue?

时间:2013-04-04 15:30:50

标签: java jsf primefaces

据我所知,在SelectOneMenu中显示信息的正确方法是拥有一个对象列表并使用它的属性如下:

<p:selectOneMenu id="player" value="">  
    <f:selectItem itemLabel="Select" itemValue="" />  
    <f:selectItems value="#{players}"
       var="player"
       itemLabel="#{player.name}"
       itemValue="#{player.id}"/> 
</p:selectOneMenu> 

但如果我没有球员名单怎么办,如果我有这样的话怎么办?我想让它像这样工作:

//PlayerManager
public List<String> getPlayerNames() {
    String[] names = new String[] {"player1", "player2"};
    return Arrays.asList(names);
}

public List<String> getPlayerIds() {
   String[] ids = new String[] {"1", "2"};
   return Arrays.asList(ids);
}

<p:selectOneMenu id="player" value="">  
    <f:selectItem itemLabel="Select" itemValue="" />  
    <f:selectItems value="#{playerManager.playerNames}"
       var="player"
       itemLabel="#{playerManager.playerNames}"
       itemValue="#{playerManager.playerIds}"/> 
</p:selectOneMenu> 

1 个答案:

答案 0 :(得分:7)

使用<c:forEach>生成<f:selectItem>个组件。您可以使用其varStatus属性来获取当前迭代索引,以便您可以通过索引获取另一个列表中的项目。

<c:forEach items="#{playerManager.playerIds}" var="playerId" varStatus="loop">
    <f:selectItem itemValue="#{playerId}" itemLabel="#{playerManager.playerNames[loop.index]}" />
</c:forEach>

请注意,当#{playerManager}是视图作用域时,此构造将在每次回发时重新创建bean。另请参阅JSTL in JSF2 Facelets... makes sense?

相关问题