在 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)
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) 规范。