首先,请原谅我缺乏理解......我还在学习:)。
我的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">
答案 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的目录中,并且只需将结果修改为指向正确的位置。