如何在JSP脚本段中使用<c:forEach>循环并赋值变量
正确实现方式
首先明确你原代码的两个核心问题:
- JSP脚本段(
<% %>)里不能直接嵌入EL表达式(${}),两者属于不同上下文,无法直接互通; - 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
相关产品推荐
相关产品推荐

