I have this code that actually works:

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

How con I do the same thing but with c:foreach instead of s:iterator ?

I tried with:

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

but I get the error:

According to TLD or attribute directive in tag file, attribute action does not accept any expressions

Thankyou.

有帮助吗?

解决方案

To be more comfortable with Struts2 tags and OGNL language, read and bookmark this answer.

Since Struts2 tags only evaluate OGNL expressions (and not EL Expression, as you error clearly states), you need to access the JSTL object through the PageContext attribute (in OGNL #attr.something) specified with 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>

From OGNL Basics:

#attr['foo'] or #attr.foo : Access to PageContext if available, otherwise searches request/session/application respectively

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top