一尘不染

Struts2锚标记不包含contextPath

jsp

%{#request.contextPath}在Struts2的s:a标记内不起作用。(具体来说是Struts
2.2.1。)是否有使其工作的方法?它可以在其他Struts2标签中使用。

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

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

请注意,上下文路径保留在锚点之外,但包含在表单中。

PS我不能${#pageContext.request.contextPath}在这里使用,因为${}Struts2标记中不允许使用。此外,我正在努力保持一致。而且我还尝试避免${}这种情况,因为它不会自动转义输出。

谢谢!


阅读 237

收藏
2020-06-10

共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>
2020-06-10