Struts2 - 在struts.xml中有两个包指向动态Web根目录

时间:2010-09-07 20:59:01

标签: java struts2

首先,请原谅我缺乏理解......我还在学习:)。

我的struts.xml中有2个包扩展了一个基础包,我希望能够通过在我的浏览器中输入类似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"> 

 

1 个答案:

答案 0 :(得分:4)

在Struts 2中,您不需要根据用于访问它们的URL将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>

然后,您可以使用以下网址访问该操作:http://yourserver/2/myaction.action

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