Как использовать 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
соответственно