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

如何在JSP页面中使用JSTL一次性展示所有迭代内容

我来帮你搞定这个问题!你现在的核心问题是把计数器的初始化放到了<c:forEach>循环内部,导致每次遍历都会重置计数器为0,根本没法实现累加效果。下面是修正后的完整方案:

正确实现步骤
  1. 在循环外初始化计数器:确保计数器在整个遍历过程中能持续保留累加值,不会被反复重置。
  2. 循环内根据分类累加:遍历每个skill时,根据其category匹配对应的计数器进行累加。
  3. 一次性展示汇总/迭代内容:遍历完成后可以统一展示所有累加结果,也可以在遍历过程中同时展示单个技能和当前累计数。
完整代码示例
<%-- 先引入JSTL核心标签库(如果页面还没引入的话) --%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%-- 如果需要处理字符串大小写统一,可引入函数标签库 --%>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>

<%-- 1. 在循环外初始化所有计数器,作用域默认是page,全局有效 --%>
<c:set var="cicount" value="0" />
<c:set var="pscount" value="0" />
<c:set var="prcount" value="0" />
<c:set var="jrcount" value="0" />

<%-- 2. 遍历studentSkills列表,处理每个skill并累加计数器 --%>
<c:forEach items="${studentSkills}" var="skill">
    <div class="panel panel-default">
        <div class="panel-body-center">
            <%-- 用toLowerCase避免大小写匹配问题 --%>
            <c:choose>
                <c:when test="${fn:toLowerCase(skill.category) eq 'community involvement'}">
                    <c:set var="cicount" value="${cicount + 1}" />
                    <p>${skill.name}(社区参与类 · 当前累计:${cicount})</p>
                </c:when>
                <c:when test="${fn:toLowerCase(skill.category) eq 'professional skills'}">
                    <c:set var="pscount" value="${pscount + 1}" />
                    <p>${skill.name}(专业技能类 · 当前累计:${pscount})</p>
                </c:when>
                <c:when test="${fn:toLowerCase(skill.category) eq 'projects'}">
                    <c:set var="prcount" value="${prcount + 1}" />
                    <p>${skill.name}(项目类 · 当前累计:${prcount})</p>
                </c:when>
                <c:when test="${fn:toLowerCase(skill.category) eq 'job roles'}">
                    <c:set var="jrcount" value="${jrcount + 1}" />
                    <p>${skill.name}(岗位角色类 · 当前累计:${jrcount})</p>
                </c:when>
                <c:otherwise>
                    <p>${skill.name}(未分类)</p>
                </c:otherwise>
            </c:choose>
        </div>
    </div>
</c:forEach>

<%-- 3. 遍历结束后,一次性展示所有分类的累加结果 --%>
<div class="panel panel-info">
    <div class="panel-heading">技能分类统计汇总</div>
    <div class="panel-body">
        <ul class="list-unstyled">
            <li>社区参与类:<strong>${cicount}</strong> 项</li>
            <li>专业技能类:<strong>${pscount}</strong> 项</li>
            <li>项目类:<strong>${prcount}</strong> 项</li>
            <li>岗位角色类:<strong>${jrcount}</strong> 项</li>
        </ul>
    </div>
</div>
关键注意点
  • 计数器初始化必须放在<c:forEach>外部:JSTL变量默认作用域是page,放在循环外才能保证整个遍历过程中值被持续修改。
  • 使用<c:choose>替代多个<c:if>:逻辑更清晰,避免重复判断,效率也更高。
  • 字符串大小写处理:用fn:toLowerCase()统一转换后再匹配,避免因分类名称大小写不一致导致的匹配失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:36:45