在没有属性名称的情况下访问jstl中的类属性

时间:2014-07-18 21:19:18

标签: jsp jstl

在我目前的spring项目中,我希望使用json-taglibs生成我的视图使用的json文件:

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib prefix="json" uri="http://www.atg.com/taglibs/json" %>
<json:object>
    <json:array name="item" var="item" items="${lista}">
          <json:object>
            <c:forEach var="attr" items="${atributo}">
                <json:property name="${attr}" value="${item}"/>
            </c:forEach>
          </json:object>
    </json:array>
</json:object>

其中:

lista - &gt;存储在数据库中的所有实体的列表。

atributo - &gt;来自实体的所有属性的列表

如果我只有变量value="${item},任何人都可以告诉我是否可以访问表达式attr中的类属性?

我试过这个:${item}.${attr}${item.attr}没有成功。

1 个答案:

答案 0 :(得分:2)

我的问题不清楚,但可能有助于您了解EL。

在访问属性时,

EL依赖于JavaBeans specification。在JSP中,使用以下表达式

${user.name}

与“raw”scriptlet代码中的以下内容基本相同(下面的示例是为了简单,实际上反射API用于获取方法并调用它们):

<%
  User user = (User) pageContext.findAttribute("user");
  if (user != null) {
    String name = user.getName();
    if (name != null) {
      out.print(name);
    }
  }
%>

括号

您可以使用所谓的大括号[]来通过动态名称访问属性,通过包含句点的键访问地图值,使用名称/键,这些名称/键本身是Java中保留的文字并访问数组或按索引列出项目。

${sessionScope[dynamicName]}
${someMap[dynamicKey]}
${someMap['key.with.periods']}
${some['class'].simpleName}
${someList[0].name}
${someArray[0].name}

上述内容基本上与

相同
session.getAttribute(dynamicName);
someMap.get(dynamicKey);
someMap.get("key.with.periods");
some.getClass().getSimpleName();
someList.get(0).getName();
someArray[0].getName();

Read more...