2013-02-15 41 views
1

我正在使用下面的代码来重写我的URL。每次我点击它的作品文件链接,都会将EXTRA Profile/view添加到地址的末尾。如何更改我的代码以使用tiles和struts2正确地实现url重写

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

我第一次在视图中单击它,它变成

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

后,如果我再次点击视图这将是(每次我点击就将此一/个人资料的地址)

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

+0

我不明白如何重写这个。有什么问题? – 2013-02-15 01:06:31

+0

嗨,戴夫,我在前面的问题中遵循了你的回答,但是如第一次解释的那样,但我每次点击视图都会在地址末尾添加一个额外的配置文件/视图。 – 2013-02-15 01:07:45

回答

1

很难说没有包装声明,但它看起来像你'在动作中重新获得额外的名称空间,因为您将<s:url>标记指定为操作的一部分,而不是使用namespace属性。

如果当前操作是配置文件命名空间的一部分,它将不会被添加。如果不是,它会的。使用namespace属性自动处理它,所以你不必考虑它。


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

您在扩大struts-default程序包,该程序包不了解tiles结果类型。您需要延长您的默认,其中确实包括tiles结果类型或tiles-default(或任何它被称为,我不记得)。

+0

问题已更新 – 2013-02-15 01:13:49

+0

@DanielMorgan正如我所怀疑的。你还应该用斜杠启动命名空间,但不能结束,尽管我不知道这是否会影响行为。 – 2013-02-15 01:15:24

+0

给出相同的错误 – 2013-02-15 01:17:13

相关问题