代码之家  ›  专栏  ›  技术社区  ›  Kleber Mota

访问jstl中的类atribute而不使用atribute的名称

  •  0
  • Kleber Mota  · 技术社区  · 10 年前

    在我当前的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>
    

    哪里:

    列表 ->存储在数据库中的一种类型的所有实体的列表。

    阿特里布托 ->实体的所有属性列表

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

    我已经试过了: ${item}.${attr} ${item.attr} 没有成功。

    1 回复  |  直到 10 年前
        1
  •  2
  •   Community CDub    4 年前

    我不清楚你的问题,但它可能会帮助你了解EL。

    EL 依赖于 JavaBeans specification 当涉及到访问财产时。在JSP中,以下表达式

    ${user.name}
    

    基本上与“原始”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...