2013-12-14 69 views
0

名單 的正確的項目,我不能讓這個bean時,我從列表中 選擇在selectOneMenu用於

<h:selectOneMenu id="playerMenu" value="#{player.combinedName}"> 
<f:selectItems value="#{serviceHCP.allPlayers}" />     
<f:ajax execute="playerMenu" render="playerMenu" /> 

選擇另一個名稱。如果我用上面的方法我會永遠結束UPP與玩家更新== NULL

如果我沒有使用f:ajax,我將永遠以相同的「玩家」結束。但我當然想要在菜單項中選擇一個。

我會然後把它傳給一個bean

<h:commandButton value="Visa lista" action="#{serviceSeries.getSeriesForPlayerInfo(club.name, player, serieType.serie_type, calendarBean) }"> 
       </h:commandButton> 
public List<Player> getAllPlayers() { 

if (factory == null) { 
    factory = Persistence.createEntityManagerFactory(PERSISTENCE_UNIT_NAME); 
} 

EntityManager em = factory.createEntityManager(); 
//Order by the matchdate. 
//Query q = em.createQuery("select t from DBTest t"); 
Query q = em.createQuery("select t from Player t"); 

List<Player> players = q.getResultList(); 
for (Player aPlayer : players) { 
    System.out.println(aPlayer); 
} 
System.out.println("Size: " + players.size()); 

em.close(); 

return players; 

}

回答

0

你必須寫一個自定義JSF轉換器轉換成您的播放器對象。 你的轉換器將最有可能..

@FacesConverter("playerConverter") 
public class PlayerConverter implements Converter { 
    @Override 
    public String getAsString(FacesContext context, UIComponent component, Object value) throws ConverterException { 
     // Convert Object to unique String representation for display. 
     return String.valueOf(((Player) value).getId()); 
    } 
    @Override 
    public Object getAsObject(FacesContext context, UIComponent component, String value) throws ConverterException { 
     // Convert submitted unique String representation back to Object. 
     return new Player(Long.valueOf(value)); 
    } 
} 

而且你的選擇應該是什麼樣子,

<h:selectOneMenu id="playerMenu" value="#{XXXXXX.player}"> 
    <f:selectItems value="#{serviceHCP.allPlayers}" var="player" itemLabel="#{player.name}" itemValue="#{player.id}"/> 
    <f:converter converterId="playerConverter" /> 
</h:selectOneMenu> 
+0

如果我必須將它轉換爲字符串不會它只是使用eaiser。 作爲局部變量。是否也可以使用valueChangeListerner做到這一點? – user2130951

0

如果您在使用轉換器出了問題,你爲什麼不使用java.util.Map舉行玩家數據。
使用地圖也可能有助於其他操作。
JSF h:selectOneMenu也支持java.util.Map

如果您有地圖,則K將成爲itemLabel,V將成爲itemValue。
您可以將播放器對象加載爲映射值。

Map<String,Player> playerMap = new LinkedHashMap<>(); 
Player selectedPlayer; 

然後..,

<h:selectOneMenu value="#{bean.selectedPlayer}"> 
    <f:selectItems values="#{bean.playerMap}"/> 
</h:selectOneMenu> 

如果你想訂單地圖收集保存的插入順序使用LinkeHashMap

Wiki page for h:selectOneMenu