struts2 struts.xml使用通配符

5.4.1  使用通配符
前面学过,可以在定义<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> 

在上面的配置中:
{1}与第一个*对应的匹配,{2}匹配第二个*
       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);  
    } 
    //属性对应的getter/setter方法,省略了  
}   

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> 

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

你可能感兴趣的:(struts.xml)