当我从列表中选择其他名称时,我无法更新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;
}
答案 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