0

我在这里束手无策。这似乎是一件非常微不足道的事情,但它不起作用。我有一个 jsp 页面,它向服务器传递一个 Long (tournamentId) 和一个对象列表。当我发布表单时,列表已正确传递,但 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

Nickdos - 哇!这就是答案!漂亮的捕捉!

回顾一下 - 字段“tournamentId”被定义为 Long(对象),但 setter 有 long(原始)作为参数。将其更改为 Long(object) 就可以了。

再次感谢尼克多斯!

于 2012-10-20T05:11:31.853 回答