2010-10-18 46 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