0

私はここで機知に富んでいます。これは非常に些細なことのように思えますが、うまくいきません。サーバーに Long (tournamentId) とオブジェクトのリストを返す jsp ページがあります。フォームを投稿すると、リストは適切に渡されますが、Long メンバーは、送信されたことがわかりますが、null として返されます。

jsp:

<form:form method="post" action="addBets" modelAttribute="gwbCollection">
<c:choose>
<c:when test="${gwbCollection.tournamentState == 'CLOSED_FOR_BETS'}">
        <br>
    </c:when>
</c:choose>
<input name="tournamentId" value="${gwbCollection.tournamentId}" type="hidden"/>
    <table>
        <tr>
            <td>Side A:</td>
            <td>Score A:</td>
            <td>Side B:</td>
            <td>Score B:</td>
        </tr>
        <c:forEach var="gwb" items="${gwbCollection.games}" varStatus="status">
            <tr>
                <td><input name="games[${status.index}].game.gameId" value="${gwb.game.gameId}" type="hidden"/>
                    <input name="games[${status.index}].userId" value="${gwb.userId}" type="hidden"/>
                    <input name="games[${status.index}].game.tournamentId" value="${gwb.game.tournamentId}" type="hidden"/>
                    <input name="games[${status.index}].bet.betId" value="${gwb.bet.betId}" type="hidden"/>
                    ${gwb.game.sideA}</td> 
                <td><input name="games[${status.index}].bet.scoreA" value="${gwb.bet.scoreA}"/></td>
                <td>${gwb.game.sideB}</td> 
                <td><input name="games[${status.index}].bet.scoreB" value="${gwb.bet.scoreB}"/></td>
            </tr>
        </c:forEach>
    </table>
    <c:choose>
        <c:when test="${gwbCollection.tournamentState == 'OPEN_FOR_BETS'}">
            <input type="submit" />
        </c:when>
    </c:choose>
</form:form>

コントローラー:

@Controller
@SessionAttributes
public class BetController {
...
@RequestMapping(value = "/addBets", method = RequestMethod.POST)
public String addBet(@ModelAttribute("gwbCollection") GamesWithBetsCollection gwbCollection) {
    List<Bet> bets = gwbUtil.getBets(gwbCollection);
...
}

最後に、GamesWithBetsCollection:

public class GamesWithBetsCollection {
private TournamentState tournamentState;
private Long tournamentId;
private List<GameWithBet> games;

public GamesWithBetsCollection() {

}

public List<GameWithBet> getGames() {
    return games;
}

public void setGames(List<GameWithBet> games) {
    this.games = games;
}

public TournamentState getTournamentState() {
    return tournamentState;
}

public void setTournamentState(TournamentState tournamentState) {
    this.tournamentState = tournamentState;
}

public Long getTournamentId() {
    return tournamentId;
}

public void setTournamentId(long tournamentId) {
    this.tournamentId = tournamentId;
}

}

4

1 に答える 1

0

ニックドス - うわー!それが答えです!美しいキャッチ!

要約すると、フィールド「tournamentId」は Long (オブジェクト) として定義されていますが、setter はパラメーターとして long (プリミティブ) を持っています。それを Long(object) に変更するとうまくいきました。

ありがとうございます!

于 2012-10-20T05:11:31.853 に答える