Как использовать JSTL <c: forEach> со Struts2 <s: url>?

У меня есть этот код, который на самом деле работает:

<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 ответ

Решение

Чтобы было удобнее использовать теги Struts2 и язык OGNL, прочитайте и добавьте в закладки этот ответ.

Поскольку теги Struts2 оценивают только выражения OGNL ( а не выражение EL, как ясно из вашей ошибки), вам необходимо получить доступ к объекту JSTL через атрибут PageContext (в OGNL #attr.something) указано с 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>

Из основ OGNL:

#attr['foo'] или же #attr.foo: Доступ к PageContext если доступно, иначе ищет request / session / application соответственно

Другие вопросы по тегам