在web應用中,頁面提交請求的引數都是字串型別的。但是在學習中,我們都是直接在action中按照需要來定義屬性的型別,比如private int age,也沒有出錯,還能正確執行,這是怎麼回事呢?這是由struts2的型別轉換框架默默的幫助我們完成的功能,只要使用者輸入的資料能合理的轉換為需要的屬性的型別,struts2的型別轉換框架就會在execute方法執行之前,替我們將引數轉換為合適的型別。
雖然內建型別轉換器能滿足絕大多數的需求,但有的時候還是需要使用自定義型別轉換器來實現特定的需求。這個時候就需要自定義型別轉換器了。
自定義型別轉換器的實現非常簡單,寫乙個類,繼承strutstypeconverter抽象類,這個抽象類有兩個方法需要我們實現:
public object convertfromstring(map context, string values, class toclass)方法,實現字串向物件的轉換,它有三個引數:
context:轉換上下文,可以在裡面引用各種物件,比如:可以通過context.get(valuestack.value_stack)來引用值棧。
values:使用者輸入的字串。
toclass:將要被轉換成的物件型別。
public string converttostring(map context, object o)方法,實現物件向字串的轉換,它有兩個引數:
context:同上,也是轉換的上下文。
o:需要被轉換的物件。
需要注意在convertfromstring方法中,使用者輸入的字串很可能是不符合要求的,所有的不符合要求的情況都要丟擲typeconversionexception。這是個執行時異常,不需要在方法上宣告丟擲。
首先要註冊這個自定義型別轉換器處理。在src下建立乙個xwork-conversion.properties檔案,這個檔案中用「全類名=這個類對應的型別轉換器全類名」,來建立類和型別轉換器的關係。放在src目錄下屬於全域性的型別轉換器。對區域性型別轉換,在action類所在的包下放置actionclassname-conversion.properties檔案,actionclassname是類名,後面的-conversion.properties是固定的寫法。
當然,在使用區域性型別轉換器引用的時候,只對這個檔名指定的action有效,對其他action無效。另外乙個重要的點就是:區域性型別轉換器的引用會覆蓋全域性型別轉換器的引用。
Struts2 自定義標籤
在用struts2寫自定義標籤時遇到了一些問題,說了乙個多小時解決了,嗯就在這裡做個備忘吧 第一次寫,呵呵,有點怕出錯,如果說的不好大家不要笑.呵呵 說明一下我的環境 eclipse tomcat 自定義標籤編寫分為以下幾步 1.編寫uibean strutstag description my e...
struts2自定義標籤
在用struts2寫自定義標籤時遇到了一些問題,說了乙個多小時解決了,嗯就在這裡做個備忘吧 第一次寫,呵呵,有點怕出錯,如果說的不好大家不要笑.呵呵 說明一下我的環境 eclipse tomcat 自定義標籤編寫分為以下幾步 1.編寫uibean strutstag description my e...
struts2 x自定義型別轉換
struts2的型別轉換是基於ognl 物件影象導航語言 1 ognl裡面有乙個介面typeconverter,該介面有乙個方法convertvalue,convertvalue該方法很複雜,裡面還有乙個預設實現類defaulttypeconverter,通過該類來實現型別轉換 typeconver...