JSTL foreach 中的 NPE:在 JSTL foreach 中访问子类变量时出现空指针异常

问题描述 投票:0回答:1

在 JSTL foreach 中访问子类变量时出现空指针异常,即使该变量存在数据。

我有这样的类结构-

public class Question implements Serializable {
    @Getter
    private String type;

    @Getter
    private String question;
}


final public class OptionSingleSelectQuestion extends Question {
    static class Option {
        @Getter
        private String uuid;
        @Getter
        private String label;

    }

    @Getter
    private List<Option> options;

    @Getter
    private String optionChosen;
}

我在 JSP 中像这样访问

options
-

<c:forEach var ="option"  items="${question.getOptions()}">
      ${option.getLabel()}
</c:forEach>

线路出现错误

${option.getLabel()}
-

java.lang.NullPointerException
    javax.el.BeanELResolver.invoke(BeanELResolver.java:159)
    org.apache.jasper.el.JasperELResolver.invoke(JasperELResolver.java:147)
    org.apache.el.parser.AstValue.getValue(AstValue.java:159)
    org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:184)
    org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate(PageContextImpl.java:943)
jsp jstl javabeans el
1个回答
0
投票

这个特殊的 NPE 来自

javax.el.BeanELResolver#invoke()
,

java.lang.NullPointerException
    at javax.el.BeanELResolver.invoke(BeanELResolver.java:159)

是无法找到 Bean 类的可能原因之一。事实上,在您的具体情况下,

Option
类是包私有的。您需要确保 bean 类是
public
(并且它有一个默认构造函数)。这也在 JavaBeans 规范中指定。

与具体问题无关

${option.getLabel()}
可以简化为
${option.label}
。另请参阅表达式语言 (EL) 规范

© www.soinside.com 2019 - 2024. All rights reserved.