2013-12-08 64 views
4

我有這樣的代碼,實際工作:如何在Struts2中使用JSTL <c:forEach><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> 

如何CON我做同樣的事情,但與C:的foreach,而不是S:迭代器?

我試着用:

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

,但我得到的錯誤:

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

三江源。

+0

除了這個問題,你爲什麼要這麼做? –

+0

Becouse我不覺得用struts標籤s:iterator和OGNL%{#}來舒服。我想堅持JSTL c:foreach和EL $ {}。另外,我總是會讀到EL和OGNL可以用不同的方式做同樣的事情。但在這種情況下,我無法找到與EL的方式。 –

+0

今天晚上我會嘗試你的代碼併發布結果,謝謝。 –

回答

6

爲了更加舒適地使用Struts2標籤和OGNL語言,read and bookmark this answer

由於(因爲你錯誤清楚地and not EL Expression),則需要通過與var規定(在OGNL #attr.something)PageContext中的屬性來訪問JSTL對象Struts2的標籤只能評估OGNL表達式:

<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 Basics

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

+1

謝謝,它按預期工作。我還閱讀了一些關於OGNL的文檔,現在它更清晰。也許我只需切換到struts2標籤+ OGNL。 Grazie mille。 –

+0

很高興幫助,prego:] –

相關問題