1

我正在使用以下代码重写我的 URL。每次我点击个人资料链接时,它都会起作用,但会在地址末尾添加额外的个人资料/视图。

http://www.example.com/myProject/Profile/view.action

我第一次点击查看它改变它

 http://www.example.com/myProject/Profile/Profile/view.action

之后,如果我再次单击该视图,它将是(每次我单击它都会在地址中添加一个 /Profile)

  http://localhost:8080/myProject/Profile/Profile/Profile/view.action

关联

  <a href="<s:url action="Profile/view"/>" >Profile</a>

struts.xml

   <package name="default" extends="struts-default">
    <result-types>
        <result-type name="tiles" class="org.apache.struts2.views.tiles.TilesResult"/>
    </result-types>

      <action name="index">
        <result type="tiles">content</result>
    </action>

 </package>

  <package name="Profile" extends="default" namespace="/Profile">
  <action name = "*" method="{1}" class="com.myproject.Profile">
    <result name="View" type="tiles">Profile</result>
            <result name="Edit" type="tiles">Edit</result>
</action>
    </package>

问题是每次我点击查看它都不会删除地址并将配置文件/视图添加到它的末尾。它只是将地址从 www.example.com/myproject/profile/view 更改为 www.example.com/myproject/profile/profile/view

4

1 回答 1

1

没有包声明很难说,但看起来您在操作中获得了一个额外的命名空间,因为您在<s:url>标记中将其指定为操作的一部分,而不是使用namespace属性。

如果当前操作是 Profile 命名空间的一部分,则不会添加它。如果不是,它会的。使用namespace属性会自动处理它,因此您不必考虑它。


编辑以反映完全不相关的问题。

您正在扩展struts-default包,它不知道tiles结果类型。你需要扩展你的默认值,它确实包括tiles结果类型,或者tiles-default(或者它叫什么,我不记得了)。

于 2013-02-15T01:09:09.770 回答