2010-09-07 50 views
1

首先两个包,请原谅我的不理解......我还在学习:)Struts2的 - 在struts.xml中指向动态Web根

我有我的支柱2包。 xml扩展了一个基础包,我希望能够通过在浏览器中输入类似于http://site.com/application/1/ThisAction.action和/application/2/ThisAction.action(示例)的内容来访问它们。

我在我的webapp文件夹中创建了两个名为'1'和'2'的目录,我可以使用上面的URL导航到两个包。我想要做的是将我的jsps放入jsp目录中,而不是webapps。所以不是我的两个文件夹驻留在/ webapp中,而应该驻留在/ webapp/jsp /中。

我试着将两个软件包的命名空间更改为/ 1/jsp /而不是简单的'/ 1',但我什么也没有得到。它只是告诉我没有任何操作映射到该操作名称。

有没有人有任何见解我如何能做到这一点?谷歌没有给我很多帮助,但可能只是我没有寻找正确的东西。

这里就是我指的是一个快速示例:

<struts> 
    <!-- Base--> 
    <package name="base" extends="struts-default" abstract = "true" namespace="/base"> 



<global-results> 
    <result name="cancel" type="redirectAction">CancelAction</result> 
    <result name="close">closewindow.jsp</result> 
    <result name="error">/jsp/wizard/GeneralError.jsp</result> 
    </global-results> 



    </package> 

    <package name="1" extends="base" namespace="/1"> 

回答

4

在Struts 2你不需要根据把你的JSP在不同的文件夹您用来访问它们的网址。相反,软件包和操作一起来创建URL,结果将决定下一个视图。因此,您首先编写您的动作:

public class MyActionClass ...{ 

    ... 
    public String actionMethod() { 
    //Your action code here 
    return SUCCESS; 
} 
} 

接下来,您将在struts.xml中创建一个指向此操作的条目。

<package name="default" extends="struts-default"> 
    <!--Interceptors, Global Results etc.--> 
    <action name="myaction" class="my.package.MyActionClass" method="actionMethod"> 
     <result>/WEB-INF/path/to/yourpage.jsp</result> 
    </action> 
    ... 
</package> 

现在,访问这个动作在默认包只需使用网址:http://yourserver/myaction.action

如果你创建第二个包有不同的名称是这样的:

<package name="2" extends="default" namespace="/2" > 

     <action name="myaction" class="my.package.MyActionClass" method="actionMethod"> 
     <result>/WEB-INF/path/to/yourpage.jsp</result> 
     </action> 
    ... 
    </package> 

然后,您可以访问的URL的行动:http://yourserver/2/myaction.action

因此,如果您愿意,您可以继续并将JSP放入名为jsp的目录中,并且您只需修改结果以指向正确的位置即可。

+0

对不起,我一定没有正确解释我自己。我们希望有两个独立的这些jsps副本。换句话说,我们希望拥有/jsp/1/yourpage.jsp以及/jsp/2/yourpage.jsp。我认为你所描述的包含一个用于这两个包的jsp,是否正确? – jacosta 2010-09-08 18:16:00

+0

不,我只是说您需要按照我所建议的方式设置包和操作,以便按照您想要的方式构建URL。因此,如果它们是两个单独的JSP页面,请继续为它们创建文件夹,只需让不同操作的结果指向相应文件夹中的相应JSP页面即可。 – 2010-09-09 01:00:24

+0

您提到的内容肯定会起作用,但如果我们有相当数量的操作并且我们不想在每个软件包中执行相同操作,该怎么办? 查看struts2文档后,我可以通过在设置struts.enable.SlashesInActionNames = true之后在操作中使用通配符来实现这一点,但根据操作本身的调用方式,我的结果似乎有所不同(具体方法'结果')。 我想我可能能够弄清楚这一点多一点调整.. 感谢您的帮助!这听起来像我在正确的轨道上? – jacosta 2010-09-09 06:32:50