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

如何在JSP脚本段中使用<c:forEach>循环并赋值变量

正确实现方式

首先明确你原代码的两个核心问题:

  1. JSP脚本段(<% %>)里不能直接嵌入EL表达式(${}),两者属于不同上下文,无法直接互通;
  2. String类型变量不能用++运算符自增,必须先转为数值类型(如int、long)才能进行自增操作。

方式一:使用脚本段实现(匹配你的需求)

如果必须用脚本段,需要通过pageContext获取<c:forEach>循环中的element对象,再读取对应属性值,转为数值后自增:

<c:forEach items="${indentIssueData}" var="element">
  <tr>
    <%
      // 替换YourElementClass为element实际对应的Java类名
      YourElementClass elementBean = (YourElementClass) pageContext.findAttribute("element");
      String idStr = elementBean.getCpReferralDtlsId();
      
      // 将字符串转为整数并自增
      int data = Integer.parseInt(idStr);
      data++;
    %>
    <td><%= data %></td>
  </tr>
</c:forEach>

如果不确定element的具体类型,可以用反射的通用方式:

<c:forEach items="${indentIssueData}" var="element">
  <tr>
    <%
      Object elementObj = pageContext.findAttribute("element");
      String idStr = "";
      if (elementObj != null) {
          try {
              // 通过反射调用属性的getter方法
              java.lang.reflect.Method getter = elementObj.getClass().getMethod("getCpReferralDtlsId");
              idStr = (String) getter.invoke(elementObj);
          } catch (Exception e) {
              e.printStackTrace();
          }
      }
      
      int data = Integer.parseInt(idStr);
      data++;
    %>
    <td><%= data %></td>
  </tr>
</c:forEach>

方式二:推荐用JSTL+EL实现(更符合JSP规范)

现在JSP开发不推荐使用脚本段,直接用EL表达式就能完成自增逻辑,代码更简洁:

<c:forEach items="${indentIssueData}" var="element">
  <tr>
    <td>${element.cpReferralDtlsId + 1}</td>
  </tr>
</c:forEach>

注意:如果cpReferralDtlsId是String类型的数字,EL会自动转换为数值进行运算;如果是纯数值类型(Integer/Long),直接运算即可。如果值无法转为数值,会抛出异常,需要确保数据格式正确。

内容的提问来源于stack exchange,提问作者Venkatesh Bvr

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 03:47:29