如何使用JSTL <c:foreach>与Struts2 <s:url>?</s:url> </c:foreach>

时间:2013-12-08 18:47:31

标签: jsp struts2 iterator jstl ognl

我有这个实际有效的代码:

<s:iterator value="breadcrumb.links" var="link">
    <s:url action='%{#link.url}' var="url" />
    <li>
       <a href="${url}">${link.name}</a>
    </li>
</s:iterator>

我怎么做同样的事情,但用c:foreach而不是s:iterator?

我尝试过:

<c:forEach items="${breadcrumb.links}" var="link">
    <s:url action='${link.url}' var="url" />
    <li>
        <a href="${url}">${link.name}</a>
    </li>
</c:forEach>

但是我收到了错误:

  

根据标记文件中的TLD或属性指令,属性操作不接受任何表达式

三江源。

1 个答案:

答案 0 :(得分:6)

为了更加熟悉Struts2标签和OGNL语言,read and bookmark this answer

由于Struts2标记仅评估OGNL表达式(and not EL Expression,因为您明确指出错误),您需要通过使用{{1}指定的PageContext属性(在OGNL #attr.something中)访问JSTL对象}:

var

来自OGNL Basics

  

<c:forEach items="${breadcrumb.links}" var="link"> <s:url action='%{#attr.link.url}' var="url" /> <li> <a href="${url}">${link.name}</a> </li> </c:forEach> #attr['foo']   :如果可用,访问#attr.foo,否则搜索   分别为PageContext / request / session