如何在Struts2 <s:url>中使用JSTL <c:forEach>?

Sim*_*nti 4 jsp iterator jstl struts2 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>
Run Code Online (Sandbox Code Playgroud)

我怎么做同样的事情,但用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>
Run Code Online (Sandbox Code Playgroud)

但我得到错误:

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

谢谢.

And*_*ios 6

为了更好地使用Struts2标签和OGNL语言,请阅读并为此答案添加书签.

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

<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>
Run Code Online (Sandbox Code Playgroud)

来自OGNL基础知识:

#attr['foo']#attr.foo :访问(PageContext如果可用),否则分别搜索 request/ session/application