在selectOneMenu </bean>中选择List <bean>的正确项

时间:2013-12-14 13:40:42

标签: java jsf javabeans

当我从列表中选择其他名称时,我无法更新bean

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

如果我使用上述方法,我将始终以玩家== null

结束upp

如果我在没有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;

}

2 个答案:

答案 0 :(得分:0)

您必须编写自定义jsf转换器来转换您的Player对象。 您的转换器很可能是......

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

答案 1 :(得分:0)

如果您在使用转换器时遇到问题,为什么不使用java.util.Map来保存播放器数据。
使用地图在其他操作中也可能有所帮助 JSF h:selectOneMenu也支持java.util.Map

如果你有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