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

MySQL查询返回的ArrayList无法在JSP表格中显示的求助

排查JSP中<c:out>输出为空的问题

1. 核对实体类属性与EL表达式的名称匹配

确保items中的对象属性名和<c:out>里使用的名称完全一致且大小写正确。比如实体类定义private String userName;,EL表达式必须写${item.userName},不能写成username或UserName——EL对大小写严格敏感。

2. 验证实体类getter方法的正确性

EL表达式依赖JavaBean规范的getter方法取值:

  • 访问userName必须对应public String getUserName()方法,方法名需遵循“属性首字母大写+前缀get(布尔类型用is)”的规则。
  • 若getter方法缺失或命名错误,EL将无法获取属性值。

3. 直接输出对象验证数据存在性

在<c:forEach>中先打印整个对象,确认数据是否真的被加载:

<c:forEach var="item" items="${queryResult}">
    <tr>
        <td>${item}</td> <!-- 查看对象toString()的输出内容 -->
    </tr>
</c:forEach>

如果输出类似User{id=1, userName='test'},说明对象有数据,问题出在属性访问;如果输出com.example.User@xxxxxx,仅代表未重写toString(),不影响EL取值,继续排查其他项。

4. 确认当前JSP未禁用EL表达式

检查页面顶部的page指令,确保没有isELIgnored="true"配置,正常默认值为isELIgnored="false",无需额外声明。

5. 用原生Java代码替代EL验证取值逻辑

在<c:forEach>中嵌入脚本片段直接调用getter方法,判断是否是EL的问题:

<c:forEach var="item" items="${queryResult}">
    <tr>
        <td><%= ((com.example.User)pageContext.getAttribute("item")).getUserName() %></td>
    </tr>
</c:forEach>

如果这段代码能输出值,说明EL的属性访问存在问题;如果同样为空,需回到查询方法确认实体类属性是否被正确赋值。

6. 回溯查询方法的数据填充逻辑

即使查询方法运行正常,也要确认:

  • ORM框架(如MyBatis)的结果映射是否正确关联数据库字段与实体类属性;
  • JDBC代码中是否将ResultSet的字段值正确赋值给实体类;
  • 可在查询方法中打印实体类的属性值,确认数据是否真的被填充到对象中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 02:45:58