【问题标题】:Nested JSTL variable name? is it possible?嵌套的 JSTL 变量名?可能吗?
【发布时间】:2014-08-18 15:26:45
【问题描述】:

我正在尝试在另一个变量中使用 JSTL 变量。下面的代码会更好的解释。

 <display:table id="resultsRow" name="${actionBean.list}" >                                                         

       <c:forEach items="${actionBean.anotherList}" var="columnName">

          <display:column sortable="true" property="${resultsRow.${columnName}"/>

       </c:forEach>

 </display:table>

所以基本上我将一个列表传递给显示表标记“name="${actionBean.list}"。然后我使用显示表标记的 id 属性循环遍历列表对象 (id="resultsRow" )。

现在对于列属性属性,我需要访问列表对象内的不同属性。这是使用 for:each 完成的,它为我提供了所有对象属性名称。如果您想知道为什么它的实现不仅仅是列,那是因为我使用的是 DynaBean 对象并且属性是动态的。

问题:我可以像在显示列标签属性中那样使用嵌套的变量名称吗?

我需要: 1)评估columnName并获得一个值(假设我得到“价格”字符串) 2) 将此值连接到我们的变量 (${resultsRow.price}) 3) 执行 ${resultsRow.price}

【问题讨论】:

    标签: java jstl jsp-tags displaytag


    【解决方案1】:

    正如this 回答中提到的,您应该能够使用括号表示法来访问“动态”属性,如下所示:

    <display:table id="resultsRow" name="${actionBean.list}">                                                         
    
       <c:forEach items="${actionBean.anotherList}" var="columnName">
    
          <display:column sortable="true" property="${resultsRow[columnName]}"/>
    
       </c:forEach>
    
    </display:table>
    

    【讨论】:

      【解决方案2】:

      来自el标签信息page

      您可以使用所谓的大括号符号 [] 通过动态名称访问属性,通过包含句点的键访问映射值,使用名称/键本身是 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();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-03-11
        • 1970-01-01
        • 2021-04-06
        • 2019-12-20
        • 1970-01-01
        • 2011-03-29
        • 1970-01-01
        • 2011-06-14
        相关资源
        最近更新 更多