You need to enable JavaScript to run this app. 使用JSTL <c:forEach>生成动态HTML表格时单元格不显示问题求助
优惠活动
大模型
产品
解决方案
定价
更多

使用JSTL <c:forEach>生成动态HTML表格时单元格不显示问题求助

问题修复与排查指南

现存代码的核心故障点

  • 语法拼写导致解析中断:<c:forEach>标签中varStatus="i"与后续begin="0"属性之间缺失空格,被JSP引擎判定为非法标签属性,直接跳过整个循环块的渲染。
  • 变量名作用域冲突:外层循环将items="${fields}"的遍历变量也命名为fields,与数据源属性名完全重名,运行时会出现属性递归覆盖,无法正常读取后端传递的集合数据。
  • 循环结构与目标结构错位:原逻辑每轮循环生成「1个仅含1个th的独立tr、1个独立数据tr」,和目标要求的「1行5个列头、多行动态数据行」的表格结构完全不匹配,就算循环正常执行也无法生成预期布局。
  • 空测试条件触发异常:<c:when test="">的空EL表达式会触发解析报错,直接中断当前循环块的渲染流程。

修正后的可运行实现

完全匹配目标静态表格的结构规范,保留原代码中的自定义样式、动态class与id生成逻辑:

<tbody class="highlight">
    <!-- 固定表头行,匹配5个列的结构要求 -->
    <tr class="row">
        <th class="head" style="border: 1px solid rgba(0,0,0,0.15); background: #fff !important; max-width: 30px;"></th>
        <th class="head" style="border: 1px solid rgba(0,0,0,0.15); background: #fff !important; max-width: 30px;"></th>
        <th class="head" style="border: 1px solid rgba(0,0,0,0.15); background: #fff !important; max-width: 30px;"></th>
        <th class="head" style="border: 1px solid rgba(0,0,0,0.15); background: #fff !important; max-width: 30px;"></th>
        <th class="head" style="border: 1px solid rgba(0,0,0,0.15); background: #fff !important; max-width: 30px;"></th>
    </tr>
    <!-- 动态渲染数据行 -->
    <c:forEach items="${fields}" var="field" varStatus="i">
        <tr class="row tr_${i.index}_am disp-none ${i.index}am ${i.index}-time common-td"
            style="border: 1px dotted rgba(0, 0, 0, 0.15);">
            <!-- 行序号单元格 -->
            <td class="cell" style="width: 35px; background: #fff !important; vertical-align: center;">${i.index}</td>
            <!-- 遍历生成剩余4个单元格,凑满5列匹配表头宽度 -->
            <c:forEach begin="0" end="3" varStatus="cell">
                <td class="cell rowspaneven" id="${i.index}Slot_${cell.index}"></td>
            </c:forEach>
        </tr>
    </c:forEach>
</tbody>

二次排查方向

如果修正代码后仍存在渲染异常,可按以下顺序排查:

  • 检查页面头部是否正确引入JSTL核心标签库:<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>,未引入的情况下所有<c:*>标签会被当作未知元素跳过渲染。
  • 确认后端传递的fields属性是否存在:通过request.setAttribute、Model.addAttribute等方式传递的集合,需保证属性名与EL表达式中的${fields}大小写完全一致,且值不为null,空集合会直接跳过循环渲染。
  • 检查web.xml的版本配置:低版本Servlet环境下如果未正确开启EL表达式解析,所有${}表达式会被当纯文本输出,无法触发动态逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.28 15:24:04