来自实体和外键问题的JSF表格

时间:2015-12-25 21:19:14

标签: jsf netbeans

最近我做了[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。

1 个答案:

答案 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需要StringPlayer个对象。对于POJO JSF转换器,您可以在谷歌搜索并阅读here

查看: