成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

使用WebWork Action實現復用控制器邏輯

開發 后端
Webwork是標準的請求風格Web MVC,類似的有Struts、Spring MVC。本文指引您使用Webwork Action實現復用控制器邏輯。

Webwork是標準的請求風格Web MVC,類似的有Struts、Spring MVC。這這種風格的MVC中都使用了前端控制器模式(企業架構模式),也就是說一個URL會被解析然后派發到對應的Webwork Action解析,而View調用的是Action處理后的Form對象或者Command對象(Rod的Without EJB)。

上面引用了一些經典的言論,而它們和“頁面控制器風格Action復用”有什么關系呢?

頁面控制器在這里指到了View的Page里面依然可以調用控制器(在Webwork中就是Action)。如果是以前肯定有人會說,如果用JSP我隨時可以在Page里面寫scriptlet,什么東西都能調用……

可是,現在不一樣了。我們希望讓View單純一點,不要有雜亂無章的邏輯參與其中。

可是,如果要是如上面所說那么Action在它的一個請求生命周期就要做所有的事……這樣一是使Action邏輯變得復雜,二是會變得難以復用。

所以,說到這里就引出了這個主題:

1、在頁面調用控制器

2、復用控制器邏輯

在Webwork中我們可以使用標簽實現這個目的。

我們先介紹一下ww:action的兩種主要用法,而說用法之前先說語法:

語法:

有5個屬性:

1、id:給Action返回的ValueStack命名,如果不寫則默認為調用的Action的名字。(詳細使用參照后面)

2、name:調用的Action的name。

3、namespace:調用的Action的namespace。

4、executeResult:true或false,是否渲染Action的View。這個決定了ww:action的用法。(后面會做說明)

5、ignoreContextParams:Boolean值,request參數是否在Action被調用時所包括。

好了,語法很簡單,我們說ww:action的兩種主要用法。

1、代替 include有兩種方式@ include和jsp:include,它們一個是編譯前一個是運行時include。webwork是不能使用的。

但其實ww有ww:include標簽,但是根據Webwork in Action中的推薦,ww:include標簽適合調用一般servlet,而對于action則推薦使用強大的ww:action。所以我們這里就略過ww:include。

說強大是什么意思呢?ww:action充當這個角色時,可以選擇是否將valueStack的東西復制過來。

當ww:action代替jsp:include的時候我們需要executeResult="true",這個時候調用的action返回的view會被include到調用的位置。

則可以給action傳遞參數。其它的用法就與jsp:include或者ww:include用法差別不大了。

2、頁面控制器風格Webwork Action復用:

我們經常遇到這樣的場景,比如用戶注冊的時候需要選擇單位列表。那么我們reg.action運行之前就需要先把單位列表unitsList取出來。而它們本身與User注冊邏輯上沒什么關系。

所以有的人把這個取出unitsList單獨寫在prepare()方法里面,然后用prepare Inteceptor……或者把讀取unitsList的邏輯寫在execute方法里面。

但是這顯然難以復用!

其實如果有單位unit這樣的domain,我們可能就有對應的CRUD的Action。其中可能就有UnitsListAction這樣的Action。

我們完全可以在用戶注冊的時候就復用這個Action,而不是把同樣的邏輯寫到用戶注冊的Action里面。這就是頁面控制器風格要解決的問題。

說那么多大帽子其實沒有意義,我們看看怎么實現:

UnitsListAction片斷(我們要復用它):

java代碼:

  1. UnitService unitService = null;  
  2. //注入,商業邏輯   
  3. List unitsList = null;  
  4. //設置對應getter、setter   
  5. Public String execute() {   
  6. unitsList = unitDao.listAll();   
  7. return SUCCESS;   

UserRegAction假設在注冊前只是doDefault()直接返回SUCCESS,只有在Post數據時在調用execute(),我們就不寫空的代碼了。或者不通過任何Action調用注冊頁面,直接調用注冊的jsp文件直接訪問也可以。

到了UserRegAction顯示的View,我這里是Jsp片斷:

java代碼: 

  1. action id="listUnits" executeResult="false" 
  2. namespace="/" name="unitsListAction" />   
  3. select name="unitId" list=  
  4. "#attr.listUnits.unitsList" listKey="id" 
  5. listValue="name" required="true"/> 

注意,executeResult="false",也就是說我們不渲染unitsListAction返回的view,只用它的值。

 而訪問它的值的時候要使用#attr.listUnits.unitsList這樣的引用,因為這時unitsListAction返回的VlueStack不是頁面的ognl的rootStack,我們需要訪問#attr這個Stack,這部分可以參考一下Webwork的wiki。

上面我給unitsListAction規定了一個id,這樣調用比較靈活,你可以多次調用同一個Action并且將值放在#attr下的不同地方。

 我們引用unitsListAction返回的unitsList這個list的時候需要用#attr加上我們給unitsListAction設定的id(如果不指定id,則默認unitsListAction)再加上你要訪問的變量名訪問。

 其實很簡單,而這種方式就是開始說的頁面控制器風格的action復用。雖然和真正的葉面控制器的Tapestry和JSF相差甚遠,但是也算有點那個意思了。

擴展點想,如果我們在Webwork Action實現了一個counter,也可以通過這種方式調用,連返回的值都可以忽略,呵呵,這種邏輯復用還是挺有用的。

【編輯推薦】

  1. WebWork注入Servlet方法詳解
  2. WebWork中返回INPUT的原因
  3. WebWork如何實現文件上傳配置過程
  4. 通過WebWork實現HelloWorld
  5. WebWork與Spring+Hibernate的整合
責任編輯:冰荷 來源: csdn
相關推薦

2009-07-16 16:08:30

WebWork Act

2011-07-14 10:28:54

額外域控制器

2015-08-07 15:28:46

選取城市控制器源碼

2023-08-13 18:31:45

SDN控制器

2020-04-02 09:58:26

Kubernetes容器開發

2009-07-08 09:55:51

WebWork下載

2009-07-08 10:11:30

WebWork

2011-07-12 09:29:10

主域控制器備份域控制器

2015-02-02 09:37:42

SDN控制器

2024-09-27 16:28:07

2010-01-08 12:03:42

ibmdwREST

2009-07-14 17:20:31

Webwork文件上傳

2009-01-12 11:16:58

控制器控制器行為行為結果

2013-12-19 09:32:01

SDN南向網絡控制

2011-07-20 10:06:27

域控制器AD

2015-07-20 11:34:06

2013-06-08 09:50:30

SDN控制器應用OpenFlow軟件定義網絡

2011-07-07 17:15:52

2015-05-26 10:16:27

SDNSDN控制器

2013-12-06 15:18:18

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩视频区 | 日韩精品专区在线影院重磅 | 日韩久久综合网 | 伊人久久免费视频 | 国产精品福利在线 | 伊人久操| 女同久久另类99精品国产 | 毛片a级毛片免费播放100 | 五月婷婷婷 | 国产视频中文字幕 | 成人午夜影院 | 国产资源在线观看 | 91av在线免费观看 | 91高清在线观看 | 亚洲国产精品va在线看黑人 | 美女午夜影院 | 亚洲第1页 | 日韩精品免费在线观看 | 麻豆av一区二区三区久久 | 成人免费在线电影 | 中文字幕丁香5月 | 精产国产伦理一二三区 | 国产乱码久久久 | 国产精品国产三级国产aⅴ浪潮 | 美女一级毛片 | 欧美精品在线一区二区三区 | 国产专区视频 | 日日草夜夜草 | 欧美中文在线 | 成人视屏在线观看 | 综合另类 | 日本在线观看视频 | 久久久久久国产精品久久 | 国产在线观看一区二区三区 | 欧美福利| 免费色网址 | 亚洲一在线 | 自拍视频网站 | 91青娱乐在线 | 日本视频在线 | 九九久久精品 |