具有多个包的Struts2会导致问题

时间:2014-02-07 15:20:31

标签: java jsp redirect struts2

这是我在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

我不知道如何解决这个问题。谁能建议我?

2 个答案:

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

这样我解决了这个问题。