我有以下代码:
<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" />
但问题来自于我在每次迭代中设置变量时所以当浮动打开时,它总是出现在列表的最后一个元素中,当然每次都会被覆盖。我知道问题是什么,但不知道如何解决问题。
有什么建议吗?
答案 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}">
哪种方法最好取决于实际的功能要求,这在主题启动中并不十分明确。
希望这有帮助。