0

我有一个控制器,它将 Song 对象列表传递给视图。

此列表作为 URL 列表输出,在 URL 中具有对象的 ID 属性:

例如

http: //.../song/23通过以下方式获得:

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

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

</a>

更多详细信息:

问题是将正确的歌曲对象转发给负责生成...song/23URL 的歌曲控制器的正确方法是什么?

示例:循环通过 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 回答