这是我在Struts.xml文件中的包结构
<package name="default" namespace="/" extends="struts-default">
<!-- Default action name <default-action-ref name="Index" /> -->
<action name="Index" method="index"
class="com.convergent.struts2.actions.UserAction">
<result name="success" type="dispatcher">/WEB-INF/html/index.jsp</result>
</action>
</package>
<include file="struts-admin.xml"></include>
我的Index.jsp是通过此网址
访问的http://localhost:8888/Index
在“索引”页面中,存在将该用户重定向到“设置页面”的超链接。设置操作位于“Admin”命名空间中,因此它的访问权限为:
<a href="<s:url action='Admin/Setting'/>">Setting</a>
在设置页面中,有一个超链接可将用户重定向到index.jsp页面。动作如下所示:
<a href="<s:url action='Index'/>">go back</a>
正如您所见,“索引”操作位于具有命名空间“/”的默认包中。因此,为了处理此操作,名称空间已更改,用户将重定向到index.jsp页面。我的问题是虽然用户被重定向到index.jsp页面,但网址看起来像
http://localhost:8888/Admin/Index
我想要这个网址
http://localhost:8888/Index
我不知道如何解决这个问题。谁能建议我?
答案 0 :(得分:1)
“正如您所见,'索引'操作位于默认名称空间中。” - 不在默认包和命名空间“/”中。
建议:1)不要在没有前导'/'的情况下创建名称空间,它通常不是你想要的。有关命名空间的基本用法,请参阅http://struts.apache.org/release/2.1.x/docs/namespace-configuration.html,尽管该页面不包括没有前导斜杠的命名空间的创建,以及您遇到的有趣行为。
2)使用struts2 url标记的namespace属性。使用Struts时,标记引用是您的朋友:http://struts.apache.org/release/2.3.x/docs/tag-reference.html
正如Roman所提到的,使用锚标签将更直接。
只使用url标记:
<a href="<s:url namespace='/' action='Back'/>">go back</a>
当这更清楚时:
<s:a namespace="/" action="Back">go back</s:a>
答案 1 :(得分:0)
为了解决这个问题我做的不是将用户重定向到index.jsp我首先将用户重定向到另一个这样的动作
<a href="<s:url action='Back'/>">go back</a>
要在struts-admin.xml中处理此操作,请执行以下操作:
<action name="Back">
<result name="success" type="redirectAction">
<param name="namespace">/</param>
<param name="actionName">Index</param>
</result>
</action>
这样我解决了这个问题。