前面学过,可以在定义<action>元素的name属性的时候使用通配符,使这个<action>元素不仅仅可以匹配一个URL,还可以匹配一类URL。而action的class属性和method属性能使用通配符的值。如果使用以下<action>配置:
java代码:
- <action name="*_*" class="cn.javass.action.action.{1}Action" method="{2}">
- <result name="toWelcome">/s2impl/welcome.jsp</result>
- </action>
在上面的配置中:
name属性的值中“*”代表长度不为0的任意字符串,因此,它可以响应的action只需要名称中间有一个下划线即可。
如果使用HelloWorld_create.action作为访问的action名称的话,struts.xml中action名称为HelloWorld_create,第一个通配符匹配HelloWorld,第二个通配符匹配create。因此,由cn.javass.action.action.HelloWorldAction的create方法来响应。
那么,对于<result>元素,能不能也使用<action>元素的name属性定义的通配符呢?答案是可以的,假如有如下的配置:
java代码:
- <action name="*_*_*_*" class="cn.javass.action.action.{1}Action" method="{2}">
- <result name="{3}">/${folder}/{4}.jsp</result>
- </action>
当然,此时的Action也要做相应的变化,给Action添加一个login的方法,同样要在这个方法里面为folder赋值。示例代码如下:
java代码:
- public class HelloWorldAction extends ActionSupport {
- private String account;
- private String password;
- private String submitFlag;
- private String folder;
- public void setFolder(String folder){
- this.folder = folder;
- }
- public String getFolder(){
- return folder;
- }
-
- public String login(){
- System.out.println("进行Login的处理");
- this.folder = "s2impl";
- return "toLoginOk";
- }
-
- public String execute() throws Exception {
- this.businessExecute();
- this.folder = "s2impl";
- return "toWelcome";
- }
-
-
-
- public void businessExecute(){
- System.out.println("用户输入的参数为==="+"account="+account+",password="+password+",submitFlag="+submitFlag);
- }
-
- }
struts.xml的配置发生了变化,尤其是Action名称配置发生了变化,那么登录页面也需要相应的变化,示例代码如下:
java代码:
- <form action="/helloworld/HelloWorld_login_toLoginOk_welcome.action" method="post">
- <input type="hidden" name="submitFlag" value="login"/>
- 账号:<input type="text" name="account"><br>
- 密码:<input type="password" name="password"><br>
- <input type="submit" value="提交">
- </form>
注意:上面配置的“HelloWorld_login_toLoginOk_welcome.action”,对应到struts.xml的时候,会被分成四个参数来匹配。其中:${1}对应HelloWorld,${2}对应login,${3}对应toLoginOk,${4}对应welcome。
去测试一下看看,是不是好用呢。其实,上面使用通配符的配置,同如下的配置是等价的,示例如下:
java代码:
- <action name="HelloWorld_login_toLoginOk_welcome" class="cn.javass.action.action.HelloWorldAction" method="login">
- <result name="toLoginOk">/${folder}/welcome.jsp</result>
- </action>
也就是把相应的参数设置到对应的位置。
私塾在线网站原创《研磨struts2》系列
转自请注明出处:【http://sishuok.com/forum/blogPost/list/0/4053.html】
欢迎访问http://sishuok.com获取更多内容