在我目前的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}
没有成功。
答案 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();