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 閱讀(1312) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 赣州市| 鹤庆县| 高碑店市| 南宫市| 稻城县| 昌乐县| 万州区| 盘山县| 迁安市| 红安县| 若羌县| 登封市| 金溪县| 徐汇区| 文成县| 白朗县| 永仁县| 宜君县| 庆城县| 弥勒县| 营山县| 红安县| 从化市| 荥阳市| 望都县| 报价| 尖扎县| 远安县| 二连浩特市| 克山县| 宁强县| 濮阳县| 常熟市| 思茅市| 东光县| 新干县| 安仁县| 白玉县| 普兰县| 和政县| 京山县|