如何将JSP中for循环提取的对应数值点击后传递到下一个页面
问题原因
你目前只能拿到循环最后一个值,是因为request.setAttribute是作用于整个请求上下文的,循环过程中你重复给同一个key赋值,后面的会覆盖前面的,整个循环跑完后这个key对应的就只剩最后一次的赋值结果,自然不管点哪个条目拿到的都是最后一个值。
可行实现方案
方案1:URL参数拼接(GET跳转场景,实现最简单)
循环渲染每个条目时,直接把当前条目的对应值拼接到跳转链接的查询参数中,每个条目的跳转链接独立携带自己的参数:
<% // 假设你要遍历的集合是从request拿到的goodsList,每个元素需要传的字段是goodsId List<Goods> goodsList = (List<Goods>) request.getAttribute("goodsList"); for(Goods goods : goodsList){ %> <!-- 每个链接单独拼接当前goods的参数 --> <a href="targetPage.jsp?goodsId=<%= goods.getGoodsId() %>"> 商品名称:<%= goods.getGoodsName() %> </a> <br> <% } %>
下一个页面取值直接用request.getParameter("goodsId")即可,注意这里是getParameter不是getAttribute。
方案2:单条对应独立表单(POST跳转场景,适合传敏感值/多参数)
如果不希望参数暴露在URL中,可以给每个条目单独写一个隐藏表单,点击条目时提交对应表单即可:
<% for(Goods goods : goodsList){ %> <form action="targetPage.jsp" method="post" id="form<%= goods.getGoodsId() %>"> <input type="hidden" name="goodsId" value="<%= goods.getGoodsId() %>"> <!-- 其他需要传递的参数都可以加隐藏输入框 --> <a href="javascript:document.getElementById('form<%= goods.getGoodsId() %>').submit()"> 商品名称:<%= goods.getGoodsName() %> </a> </form> <% } %>
下一个页面同样用request.getParameter("goodsId")取值。
方案3:DOM自定义属性绑定(异步跳转/前端交互多的场景)
如果需要先做前端交互再跳转,可把参数绑定到条目元素的自定义属性上,点击时动态获取当前元素的属性值再传参:
<% for(Goods goods : goodsList){ %> <div class="goods-item" data-id="<%= goods.getGoodsId() %>"> 商品名称:<%= goods.getGoodsName() %> </div> <% } %>
对应的JS逻辑:
// 给所有条目绑定点击事件 document.querySelectorAll('.goods-item').forEach(item => { item.addEventListener('click', function() { // 取当前点击条目的自定义属性值 const currentId = this.dataset.id; // 按需选择跳转/发AJAX请求,携带currentId即可 window.location.href = `targetPage.jsp?goodsId=${currentId}`; }) })
内容的提问来源于stack exchange,提问作者KAIEW EHKIN
相关产品推荐
相关产品推荐

