Rising Sun

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  148 随笔 :: 0 文章 :: 22 评论 :: 0 Trackbacks
struts2中对action name支持通配符配置,所以使其方便的实现零配置成为可能。

实现零配置后的开发会是怎样,开发员不用配置struts.xml,也不用在action代码中写annotation,是真正干净的零配置。以下的代码是我们希望达到的效果。
action示例
package net.jacker.ww.sys;

public class UserAction extends BaseAction {


  
    
public String execute() throws Exception {
         
         
return "default"
         //
 default表示使用缺省页面,路径名和action所在包和类名相关,为 /sys/User.jsp
    }

    
public String roles(){
        
        
return view("/sys/UserRoles"); // 指定展示页面为 /sys/UserRoles.jsp 
    }


    
public String xxxx(){
       
       
return redirect("/sys/User.do"); // 重定向,url为 /sys/User.do
    
    }




}


以上action的三个方法无需配置,将可以分别用以下链接进行访问:
http://localhost:8080/sys/User.do
http://localhost:8080/sys/User!roles.do
http://localhost:8080/sys/User!xxxx.do(将重定向到User.do)


下面我们来看看以上零配置是如何做到的。
首先,我们需要在struts.xml中做如下的配置。
<struts>
    
<constant name="struts.enable.SlashesInActionNames" value="true" /> <!-- action名可以有'/'字符 -->
    
<constant name="struts.action.extension" value="do"/> <!-- .do为访问扩展名 -->

  
<package name="default" extends="struts-default">
  
  
<!-- 通配符配置,匹配所有的URL对action的访问 -->
    
<action name="*/*!*" class="net.jacker.ww.{1}.{2}Action" method="{3}"> 
      
<result name="default" type="dispatcher">/{1}/{2}.jsp</result>
      
<result name="view" type="dispatcher">${viewpath}.jsp</result>
      
<result name="redirect" type="redirect">${viewpath}</result>
    
</action>
    
<action name="*/*" class="net.jacker.ww.{1}.{2}Action">
      
<result name="default" type="dispatcher">/{1}/{2}.jsp</result>
      
<result name="view" type="dispatcher">${viewpath}.jsp</result>
      
<result name="redirect" type="redirect">${viewpath}</result>
    
</action>
  
</package>

</struts>


然后是写一个Action基类,BaseAction.java
package net.jacker.ww;

import com.opensymphony.xwork2.Action;


public abstract class BaseAction implements Action{

    

    String viewpath; 
//该属性会在struts.xml中用到

    
public String view(String vpath){
        viewpath 
= vpath;
        
return "view";
    }

    
public String redirect(String vpath){
        viewpath 
= vpath;
        
return "redirect";
    }


    
public String getViewpath() {
        
return viewpath;
    }

    

}


做好以上的基础工作,你的action类只要继承BaseAction,符合XxxAction的命名规则,放到对应的包下,页面也放到对应的路径,就可以无需配置而访问了。

如果要替换view层也很简单,只要对struts.xml做简单修改,比如:

<result name="default" type="dispatcher">/{1}/{2}.jsp</result>

改为

 <result name="default" type="velocity">/{1}/{2}.vtl</result>

修改后的struts将统一使用velocity模板取代jsp作为页面展示层。

注意:
实测后发现,以上零配置的做法只在struts2.0.11版本中可以使用,在struts2.0.XX的更高版本中却未能获通过,这不能不说是个遗憾。
posted on 2009-08-20 17:21 brock 阅读(1298) 评论(0)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航: