2

私が知っている限り、 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> 
4

1 に答える 1

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 を再作成することに注意してください。JSF2 FaceletsのJSTLも参照してください...理にかなっていますか?

于 2013-04-04T15:45:52.137 に答える