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

JSTL foreach访问子类变量触发NPE:数据存在仍报空指针异常

问题分析与解决方案

核心原因

触发NullPointerException的关键原因是静态内部类Option的访问权限不足:
你定义的Option是OptionSingleSelectQuestion的包级私有静态内部类(未加public修饰符),而JSP编译后的Servlet类通常不在与实体类相同的包下。EL表达式通过反射调用getLabel()方法时,因无法访问包级私有类的方法,导致反射获取方法实例为null,最终触发NPE。

另外你的EL写法也不符合规范(虽非直接报错原因):EL表达式推荐使用属性访问语法,而非直接调用getXXX()方法。

修复步骤

  1. 修改内部类访问权限
    将Option静态内部类改为public,确保JSP容器能通过反射正常访问其方法:
final public class OptionSingleSelectQuestion extends Question {
    // 添加public修饰符
    public static class Option {
        @Getter
        private String uuid;
        @Getter
        private String label;
    }

    @Getter
    private List<Option> options;

    @Getter
    private String optionChosen;
}
  1. 优化EL表达式写法
    使用EL属性访问语法替代直接调用get方法,更简洁且符合规范:
<c:forEach var="option" items="${question.options}">
      ${option.label}
</c:forEach>
  1. 额外验证点
  • 确认后台传递到JSP的question变量是OptionSingleSelectQuestion的实例,而非父类Question的实例;
  • 确认options列表中的每个Option对象都不为null,且label字段已完成赋值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 17:30:06