You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.09 20:45:02