《研磨struts2》第五章 Result 之 5.4 使用通配符

5.4  使用通配符

5.4.1  使用通配符

前面学过,可以在定义<action>元素的name属性的时候使用通配符,使这个<action>元素不仅仅可以匹配一个URL,还可以匹配一类URL。而action的class属性和method属性能使用通配符的值。如果使用以下<action>配置:

 

java代码:
  1. <action name="*_*" class="cn.javass.action.action.{1}Action" method="{2}">  
  2.             <result name="toWelcome">/s2impl/welcome.jsp</result>  
  3. </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代码:
  1. <action name="*_*_*_*" class="cn.javass.action.action.{1}Action" method="{2}">  
  2.      <result name="{3}">/${folder}/{4}.jsp</result>  
  3. </action>  

当然,此时的Action也要做相应的变化,给Action添加一个login的方法,同样要在这个方法里面为folder赋值。示例代码如下:

 

java代码:
  1. public class HelloWorldAction extends ActionSupport {  
  2.     private String account;  
  3.     private String password;  
  4.     private String submitFlag;  
  5.     private String folder;  
  6.     public void setFolder(String folder){  
  7.         this.folder = folder;  
  8.     }  
  9.     public String getFolder(){  
  10.         return folder;  
  11.     }  
  12.       
  13.     public String login(){  
  14.         System.out.println("进行Login的处理");  
  15.         this.folder = "s2impl";  
  16.         return "toLoginOk";  
  17.     }  
  18.       
  19.     public String execute() throws Exception {  
  20.         this.businessExecute();  
  21.         this.folder = "s2impl";  
  22.         return "toWelcome";  
  23.     }  
  24.     /** 
  25.      * 示例方法,表示可以执行业务逻辑处理的方法 
  26.      */  
  27.     public void businessExecute(){  
  28.         System.out.println("用户输入的参数为==="+"account="+account+",password="+password+",submitFlag="+submitFlag);  
  29.     }  
  30.     //属性对应的getter/setter方法,省略了  
  31. }  

struts.xml的配置发生了变化,尤其是Action名称配置发生了变化,那么登录页面也需要相应的变化,示例代码如下:

 

java代码:
  1. <form action="/helloworld/HelloWorld_login_toLoginOk_welcome.action" method="post">  
  2.     <input type="hidden" name="submitFlag" value="login"/>  
  3.     账号:<input type="text" name="account"><br>  
  4.     密码:<input type="password" name="password"><br>  
  5.     <input type="submit" value="提交">  
  6. </form>  

注意:上面配置的“HelloWorld_login_toLoginOk_welcome.action”,对应到struts.xml的时候,会被分成四个参数来匹配。其中:${1}对应HelloWorld,${2}对应login,${3}对应toLoginOk,${4}对应welcome。

       去测试一下看看,是不是好用呢。其实,上面使用通配符的配置,同如下的配置是等价的,示例如下:

 

java代码:
  1. <action name="HelloWorld_login_toLoginOk_welcome" class="cn.javass.action.action.HelloWorldAction" method="login">  
  2.         <result name="toLoginOk">/${folder}/welcome.jsp</result>  
  3. </action>  

也就是把相应的参数设置到对应的位置。

 

私塾在线网站原创《研磨struts2》系列

转自请注明出处:【http://sishuok.com/forum/blogPost/list/0/4053.html

欢迎访问http://sishuok.com获取更多内容

猜你喜欢

转载自rubbing-struts2.iteye.com/blog/1506619