每个异构集合的jstl核心

时间:2013-07-23 10:44:24

标签: java jsp jstl jsp-tags

我有一个控制器将类型为ArrayList的{​​{1}}类型的对象返回到JSP页面。 ArrayList中的对象属于不同的类,假设MyClassMyClass1每个都扩展了MyClass。我可以使用forEach标记遍历集合,并通过MyClass2中的字段type获取当前元素类型,但是当我尝试访问MyClass的特定字段时得到了这个错误。

MyClass1

这是我的代码:

javax.el.PropertyNotFoundException: Property 'noContentMessage' not found on type it.sei.core.rinterface.MyClass1

那为什么会这样呢?在JSTL中不可能处理这种情况吗?

1 个答案:

答案 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变量是有意义的。