0

基本的な投票機能を処理する Spring/Hibernate で Web アプリケーションを作成しています。特定の ID のデータベースに投票を追加する /vote/{gameId} へのリンクが必要です。しかし、これを達成する方法については本当に途方に暮れています。コントローラーで試したことは次のとおりです。

@RequestMapping(value="/vote/{gameId}", method = RequestMethod.POST)
public String addVote(@PathVariable("gameId")
Integer gameId) {

    Vote vote = new Vote();
    vote.setGameId(gameId);

    voteService.addVote(vote);
    return "redirect:/games/wanted.html";
}

リンクがjspに表示される場所は次のとおりです。

<c:if test="${!empty games}">
    <table>
        <tr>
            <th>Game Title</th>
            <th>Votes</th>
            <th>&nbsp;</th>
        </tr>

        <c:forEach items="${games}" var="game">
            <tr>
                <td><c:out value="${game.title}"/></td>
                <td>Placeholder</td>
                <td><a href="vote/${game.id}">Vote!</a></td>
            </tr>
        </c:forEach>
    </table>
</c:if>

これを試してみると、404エラーが発生します。どんな洞察も素晴らしいでしょう。

4

1 に答える 1

2

これは、プレーンなJavascriptを使用してポストコールを行う方法です。

var url = "vote";
var params = "id=1";
http.open("POST", url, true);

//Send the proper header information along with the request
http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
http.setRequestHeader("Content-length", params.length);
http.setRequestHeader("Connection", "close");

http.onreadystatechange = function() {//Call a function when the state changes.
    if(http.readyState == 4 && http.status == 200) {
        alert(http.responseText);
    }
}
http.send(params);

リンクのonclickでこれを呼び出す必要があります。

一方、たとえば、jQuery Javascriptライブラリを使用すると、はるかに簡単になります。

特定のケースでは、次のようになります。

$.post("vote", { id: "1" } );

または、完全なjQueryの回答(#linkidをタグのIDに置き換えることを忘れないでください):

$(document).ready(function() {  //this runs on page load
  // Handler for .ready() called.

   $('#linkid').click(function(event) {  //this finds your <a> and sets the onclick, you can also search by css class by type of tag
     $.post("vote", { id: "1" } );
       return false; //this is important so that the link is not followed
    });

});
于 2012-07-12T01:38:57.197 に答える