0

Song オブジェクトのリストをビューに渡すコントローラーがあります。

このリストは、URL にオブジェクトの ID プロパティを含む URL のリストとして出力されます。

例えば

http: //.../song/23によって取得されます。

<a href="song/${song.id}">   

<c:out value="${song.songName}"/>

</a>

詳細:

...song/23問題は、正しい曲オブジェクトを、 URLの生成を担当する曲コントローラーに転送する正しい方法は何でしょうか?

例: 4 つの曲オブジェクトをループすると、4 つのリンクを持つビューが生成されます。

リンク1 リンク2 リンク3 リンク4

各リンクは曲のオブジェクトに対応しており、各リンクをクリックすると一意の URL に転送されます。例: song1 の ID が 42 の場合、Link1 をクリックすると http://../song/42 に転送され、Link1 に対応する曲オブジェクトが曲コントローラに渡されます。

4

1 に答える 1

0

フォームに隠し変数をいくつか用意して、曲が選択されたときに変数にデータを入力し、javascript 関数からコントローラーに送信することができます。

HTML:

<form method="POST" id="formId" action="">

    <input type="hidden" name="selectedSongId" value=""/>
    <input type="hidden" name="selectedSongName" value=""/>
    <input type="hidden" name="selectedSongArtist" value=""/>

    <c:forEach ...>
        <a href="submitForm(${song.id}, ${song.songName}, 
                            ${song.selectedSongArtist})">   
            <c:out value="${song.songName}"/>
        </a>
    </c:forEach>
</form>

Javascript:

submitForm = function(songId, songName, songArtist){
    form = document.getElementById('formId');
    form.selectedSongId = songId;
    form.selectedSongName = songName;
    form.selectedSongArtist = songArtist;

    form.action="songs/"+songId+"/doSomething";
    form.submit();
}

コントローラ:

@RequestMapping("songs/{songId}/doSomething")
public String handleSubmit (@PathVariable String songId,
                  @RequestParam("selectedSongName") String songName,
                  @RequestParam("selectedSongArtist") String songArtist) {

    // do Something
}

これで十分です。

ただし、JSON オブジェクトにデータを入力し、@ModelAttribute 注釈付き引数を持つコントローラー ハンドラー メソッドに送信することもできます。興味のある方はググってください。

于 2013-07-11T07:13:03.143 に答える