WebWork Action功能介紹
最近在學(xué)習(xí)《webwork in action》雖然能在網(wǎng)絡(luò)上下載到電子版,但是在書店看到了中文版紙制圖書,還是忍不住買了一本。隨便瀏覽了下,還是要比電子版本介紹的詳細的多,很多細節(jié)介紹,對實際的開發(fā)有很大的幫助。邊看書,邊寫程序,邊簡單記錄下筆記,方便以后查看。
本人使用的webwork 2.2.4 比圖書介紹的例子所使用的版本高,怕因為版本的原因會有不同的地方,因此,看一點,寫程序試試,這樣能加深了自己的印象。
前面的筆記中,有介紹webwork 的基本配置,這里就不多說了。此次主要介紹ActionSupport這個類的一些常用功能。我們常說的action類,其實就是實現(xiàn)execute()方法的類,此方法返回一個 result code,控制器就是根據(jù)于此來實現(xiàn)控制的。90%的action類現(xiàn)在都是繼承于ActionSupport 類,他幫助我們默認實現(xiàn)了很多功能。比如:action數(shù)據(jù)校驗,本地化信息等等。
Webwork Action實現(xiàn)了一套自己的視圖標(biāo)簽,有很多的功能,能幫助我們輕松實現(xiàn)表單數(shù)據(jù)的校驗,個人感覺如果使用標(biāo)簽的話,視圖中的入侵性太大,另外就是不利于團隊分工。既然webwork支持freemark這樣的模版,為什么不用呢?還是比較不錯的東西。
ActionSupport基類實現(xiàn)Validateable接口,里面就一個方法 public void validate();方法。如果你想實現(xiàn)后臺數(shù)據(jù)驗證,又沒有使用ww標(biāo)簽,這個方法是個不錯的選擇。
我們看下沒有使用這個方法的execute()我們?nèi)绾螌懀航o出關(guān)鍵代碼
- private String message;
- private String name;
- public String execute(){
- if(name==null||"".endsWith(name)||
- "World".endsWith(name)){
- logger.info( “名稱錯誤!”);
- return INPUT;
- }
- message="Hello,"+name+" !\n";
- return SUCCESS;
- }
我們手工實現(xiàn)name字段的校驗,這樣也許沒甚么不好,一樣實現(xiàn)功能呀!
我們再看看重構(gòu)后的代碼:
- private String message;
- private String name;
- public String execute(){
- message="Hello,"+name+" !\n";
- return SUCCESS;
- }
- public void validate(){
- if(name==null||"".endsWith(name)||
- "World".endsWith(name)){
- addFieldError("name", "myMessage");
- logger.info( getText("myMessage"));
- }
- }
代碼并沒有減少,只不過移了下位置,把數(shù)據(jù)驗證部分放到validate()方法中了。
在Webwork Action中,先執(zhí)行validate()這個方法,如果校驗成功就繼續(xù)執(zhí)行Webwork Action的其他部分,否則,返回 INPUT .
如果你關(guān)注ww 標(biāo)簽,這里就介紹下 addFieldError("name", "錯誤信息提示!");方法。此方法會向你使用的標(biāo)簽添加提示信息。輕松實現(xiàn)表單驗證的用戶提示。此方法必須和ww標(biāo)簽一起使用效果才明顯,本人不怎么喜歡ww標(biāo)簽,就不詳細介紹了。
另外一個常用的功能,本地信息的支持。ActionSupport中的 getLocale()會從瀏覽器的request header中獲得locale的值,從而調(diào)用語言配置文件。要想實現(xiàn)本地信息化顯示,就必須配置 *.properties 文件。還是上面的例子:
- public void validate(){
- if(name==null||"".endsWith(name)||
- "World".endsWith(name)){
- addFieldError("name", "myMessage");
- logger.info("myMessage");
- }
我們設(shè)置了提示信息,如果要實現(xiàn)本地信息化,還要建立一個 className.properties的文件,此文件和類在同目錄下,內(nèi)容如下:
myMessage=This is my message;
代碼增加一個getText()方法。
- public void validate(){
- if(name==null||"".endsWith(name)||
- "World".endsWith(name)){
- addFieldError("name", getText("myMessage"));
- logger.info( getText("myMessage"));
- }
如果你需要其他語言。只需要配置 className_*.properties 文件。這讓我想起來了軟件的漢化翻譯工作,常完游戲的朋友應(yīng)該很熟悉。Webwork的翻譯工作是不是做的很周到呢。。。
Jsp中還有常用幾個常用對象,比如:Session, Applaction等。我們常常就是根據(jù)Session來判斷用戶是否登陸過。
Webwork中,通過ActionContext來訪問。
- Map session=ActionContext.getContext().getSession();
- session.put(“userName”,user);
當(dāng)然,get()方法就能把session取出來。
我們常用的數(shù)據(jù)基本就是這些,通過Webwork Action和模型中的對象,基本能實現(xiàn)對信息的填充,特別是視圖層。
Webwork實現(xiàn)的文件上傳功能,真是太簡單了?;跀r截器的實現(xiàn)方式,能讓我們輕松實現(xiàn)文件的上傳。
【編輯推薦】