我有一个控制器将类型为ArrayList
的{{1}}类型的对象返回到JSP页面。
ArrayList中的对象属于不同的类,假设MyClass
和MyClass1
每个都扩展了MyClass。我可以使用forEach标记遍历集合,并通过MyClass2
中的字段type
获取当前元素类型,但是当我尝试访问MyClass
的特定字段时得到了这个错误。
MyClass1
。
这是我的代码:
javax.el.PropertyNotFoundException: Property 'noContentMessage' not found on type it.sei.core.rinterface.MyClass1
那为什么会这样呢?在JSTL中不可能处理这种情况吗?
答案 0 :(得分:1)
JSP EL永远不会访问字段。只有属性,即公共吸气剂。
为要在JSP EL中使用的字段添加公共getter:
public String getNoContentMessage() {
return this.noContentMessage;
}
编辑:
此外,您的交换机块是JavaScript代码,在客户端执行,在生成页面很久之后。对于JSP引擎,JavaScript代码是纯文本,并且生成了switch块的所有分支。因此,对于集合中的每个对象,都会评估所有JSP EL表达式。
代码应该重写为
<script language="javascript" type="text/javascript">
var type = '${element.type}'; // is it necessary?
<c:if test="${element.type == 'type1'}">
var variable = '${element.variable}';
</c:if>
<c:if test="${element.type == 'type2'}">
var message = '${element.noContentMessage}';
</c:if>
</script>
虽然我不明白为集合中的每个元素重复定义相同的JS变量是有意义的。