在JSP / JSTL中覆盖变量

时间:2010-01-19 10:36:49

标签: jsp jstl

我有以下代码:

<c:forEach items="${mergeList}" var="sublist" varStatus="index">
                <c:forEach items="${sublist}" var="item" varStatus="row">

所以我的目的是在列表中显示每个“项目”。当用户单击某一行时,打开一个包含完整项目描述的浮动窗口。我使用请求范围设置变量,因此我可以用其他形式获取它们,

<c:set var="merge0" value="${sublist[0]}" scope="request" />
<c:set var="merge1" value="${sublist[1]}" scope="request" />
<c:set var="merge2" value="${sublist[2]}" scope="request" />

但问题来自于我在每次迭代中设置变量时所以当浮动打开时,它总是出现在列表的最后一个元素中,当然每次都会被覆盖。我知道问题是什么,但不知道如何解决问题。

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

如果“浮动窗口”涉及全新的HTTP请求,那么您确实需要将它们或其标识符作为请求参数传递。 E.g。

window.open('popup.jsp?itemid=${item.id}');

这样popup.jsp可以通过${param.itemid}访问它们。或者,如果在doGet()收听之间有一个servlet,您当然可以通过HttpServletRequest#getParameter()访问它们。

如果“浮动窗口”是您最初使用JavaScript显示的隐藏固定div,那么只需将值写为JS变量,以便您可以在JS上下文中访问它们。 E.g。

<script>
    var itemid = ${item.id};
</script>

或者将它们写为固定div中表格的明文或隐藏输入元素。

<input type="hidden" name="itemid" value="${item.id}">

哪种方法最好取决于实际的功能要求,这在主题启动中并不十分明确。

希望这有帮助。