最近我做了[NetBeans中的CRUD企业应用程序] [1.]我为自己制作了自己的场景,即为玩家存储分数。我有树桌玩家,游戏和玩家游戏桌。玩家和游戏桌(添加,删除,编辑)的每个东西都可以正常工作,如教程形式youtube但是,我有链接表(playerGame)的问题。当我尝试使用netBeans Palette生成JSF Form From Entity时,我得到了这段代码
<h:selectOneMenu id="fkGameId" value="#{controller.playerGame.fkGameId}" title="FkGameId" required="true" requiredMessage="The FkGameId field is required.">
<!-- TODO: update below reference to list of available items-->
<f:selectItems value="#{fixme}"/>
</h:selectOneMenu>
我也试过这个
<h:selectOneMenu id="fkPlayerId" value="#{controller.player.playerId}" title="FkPlayerId" required="true" requiredMessage="The FkPlayerId field is required.">
<!-- TODO: update below reference to list of available items-->
<f:selectItems value="#{controller.player.playerGameList}"/>
</h:selectOneMenu>
但没有结果
应该通过调色板输入playerId和gameId的外键。
我的问题是我需要做些什么才能解决这个问题,看到链接表上的类似示例会很高兴但是我找不到任何东西(我发现只有一个简单的表示例)我是JavaEE的新手这是我在这个主题上的第一个教程,说实话,我不知道如何恰当地命名。
还试图找到问题的解决方案,我从netbeans网站Generating JSF CRUD Application form Databases开始编写JavaServer Faces教程。该教程非常简单,我没有遇到任何问题,并且它在相同的场景下工作正常(我能够从下拉列表中选择外键并创建playerGame记录)。我已尝试在本教程中基于JSF页面解决此问题但是页面是使用netBeans命令生成的JSF页面形式实体类我因为我没有像之前提到的Java EE那样的经验而没有解决问题。
P.S。我需要我提供更多信息,请问。
更新:
由于Geinmachi
,现在部分工作了部分解决方案:
在我的控制器类中,我添加了
private String playerList;
public String getPlayerList() {
return playerList;
}
public void setPlayerList(String playerList) {
this.playerList = playerList;
}
private List<Player> playerLists;
public List<Player> getPlayerLists() {
return playerLists;
}
public void setPlayerLists(List<Player> playerLists) {
this.playerLists = playerLists;
}
@PostConstruct
public void init(){
playerLists = playerFacade.findAll();
// playerLists = new ArrayList<>();
// playerLists.add( new Player(player.getPlayerId()));
}
public void submit(){
System.out.println("Selected Player: " + playerList);
}
和我的jsf代码看起来像
<h:selectOneMenu value="#{controller.playerList}">
<f:selectItem itemValue="#{null}" itemLabel="#{player.playerName}"/>
<f:selectItems value="#{controller.playerLists}" var="player" itemValue="#{player.playerId}" itemLabel="#{player.playerName}"/>
</h:selectOneMenu>
在Geinmachi给出的一个链接中找到了。
但是现在我在尝试将数据插入数据库时得到javax.ejb.EJBException: Transaction aborted
因为部分解决方案没有获得fk_game_id。
答案 0 :(得分:2)
给定http://example.com/article-1
实体中的字段(带有getter / setter)
PlayerGame
private Player fkPlayerId
在控制器中:
private Game fkGameId
private List<Player> playerList
形式:
private List<Game> gameList
在您的控制器中,您需要所有玩家和所有游戏的列表供您选择。您必须为实体创建转换器,因为在HTML页面上它们只是<h:form>
<h:outputText value="Choose player"/>
<h:selectOneMenu value="#{controller.playerGame.fkPlayerId}" converter="playerConverter">
<f:selectItems value="#{controller.playerList}" var="player"
itemValue="#{player}" itemLabel="#{player.playerName}"/>
</h:selectOneMenu>
<h:outputText value="Choose Game"/>
<h:selectOneMenu value="#{controller.playerGame.fkGameId}" converter="gameConverter">
<f:selectItems value="#{controller.gameList}" var="game"
itemValue="#{game}" itemLabel="#{game.gameName}"/>
</h:selectOneMenu>
<h:commandButton action="#{controller.createPlayerGame}" value="Link player with a game"/>
</h:form>
而JSF需要String
和Player
个对象。对于POJO JSF转换器,您可以在谷歌搜索并阅读here
查看:强>