Struts2锚标记不包含contextPath

时间:2010-10-18 19:10:16

标签: java jsp struts2 contextpath

%{#request.contextPath}在s:Struts2中的标记内部不起作用。 (Struts 2.2.1具体。)有没有办法让它工作?它适用于其他Struts2标记。

以下是Struts 2项目中JSP文件中的两行,其上下文路径为“/ sites”:

<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标记中不允许使用${}。此外,我试图保持一致。我也会尝试避免${},因为它不会自动转义输出。

谢谢!

2 个答案:

答案 0 :(得分:1)

Struts 2是否支持EL

如果确实如此,您可以使用${request.contextPath}

答案 1 :(得分: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>