【问题标题】:jstl core for Each over heterogeneous collection每个异构集合的 jstl 核心
【发布时间】:2013-07-23 10:44:24
【问题描述】:

我有一个控制器向 JSP 页面返回一个类型为 ArrayList 的对象,类型为 MyClass。 ArrayList 中的对象属于不同的类,假设MyClass1MyClass2 每一个都扩展了MyClass。由于MyClass 中的字段type,我能够使用forEach 标记遍历集合并获取当前元素类型,但是当我尝试访问MyClass1 的特定字段时,我得到了这个错误。

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

这是我的代码:

class MyClass {
    String type;
    String variable;
}

class MyClass1 extends MyClass{
    String someOtherField;
}

class MyClass2 extends MyClass{
    String noContentMessage;
}



<core:forEach items="${model.GraphList}" var="element" varStatus="index"> 
<script language="javascript" type="text/javascript">

 var  type = '${element.type}';
 switch (type)
            {
                case "type1":
                    {
                       var variable = '${element.variable}';

                    }
                    break;

                case "type2":
                    {
                       var message = '${element.noContentMessage}';

                    }
                    break;
             }
             </script>   
          </core:forEach>

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

【问题讨论】:

  • 向我们展示类的吸气剂。

标签: java jsp jstl jsp-tags


【解决方案1】:

JSP EL 从不访问字段。只有属性,即公共 getter。

为要从 JSP EL 使用的字段添加公共 getter:

public String getNoContentMessage() {
    return this.noContentMessage;
}

编辑:

此外,您的 switch 块是 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 变量有何意义。

【讨论】:

  • 这解决了!原来问题出在开关块上。感谢您的帮助!
猜你喜欢
  • 2013-06-07
  • 2013-12-16
  • 2012-06-13
  • 2018-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-03
  • 1970-01-01
相关资源
最近更新 更多