2010-10-18 42 views
3

%{#request.contextPath}在Struts2中的s:a標記內不起作用。 (Struts 2.2.1具體。)有沒有辦法讓它工作?它適用於其他Struts2標籤。Struts2定位標記不包含contextPath

這裏是兩條線在JSP文件中的Struts 2項目,其上下文路徑爲「/網站」:

<s:a href="%{#request.contextPath}/clickme" theme="simple">Click here.</s:a> 
<s:form method="post" action="%{#request.contextPath}/submitme" theme="simple"></s:form> 

,這裏是輸出:

<a href="/clickme">Click here.</a> 
<form id="submitme" name="submitme" action="/websites/submitme" method="post"></form> 

注意上下文路徑離開錨點,但包含在表單中。

P.S.我不能在這裏使用${#pageContext.request.contextPath},因爲${}在Struts2標籤中是不允許的。此外,我試圖保持一致。而且我也嘗試通常避免${},因爲它不會自動轉義輸出。

謝謝!

+1

我不這樣做的Struts2 ,但我快速瀏覽了他們的文檔,不是['s:url'](http://struts.apache.org/2.x/docs/url.html)你需要什麼? – BalusC 2010-10-18 19:14:40

回答

1

這應該工作:

<s:set id="contextPath" value="#request.get('javax.servlet.forward.context_path')" /> 
<s:a href="%{contextPath}/clickme" theme="simple">Click here.</s:a> 

但是,你不應該這樣做。當你需要一個網址,使用<s:url>標籤:

<%-- Without specifying an action --%> 
<s:url id="myUrl" value="clickme" /> 
<s:a href="%{myUrl}" theme="simple">Click here.</s:a> 

<%-- With an action --%> 
<s:url id="myUrl" action="clickme" /> 
<s:a href="%{myUrl}" theme="simple">Click here.</s:a> 

順便說一句,你並不需要一個上下文路徑表單的action屬性:

<s:form method="post" action="submitme" theme="simple"></s:form> 
+1

謝謝。我試過''沒有成功,但沒有試過你的版本。但最後我使用''這樣的:'"Click here'默認情況下,也使用全局設置將'includeParams'屬性設置爲「none」。 – 2010-10-20 15:51:34

1

Struts 2支持EL

您可以使用${request.contextPath}如果確實....

+0

Struts標籤使用OGNL表達式 – KeatsPeeks 2010-10-19 07:59:03

+0

AAah,好的... JSP 2.0支持EL,所以OP可以在Struts 2標籤中使用它(或者不可以?)。我清楚地記得在Struts 1.3.6及更高版本中使用EL ...... – 2010-10-19 09:52:23

+0

我在P.S.中提到過。部分問題是我不能在Struts 2標籤中使用'$ {}'語法,並且我傾向於避免它,因爲它不會自動轉義輸出。 – 2010-10-20 15:50:26