struts2(五)型別轉換

2021-07-11 15:04:58 字數 3178 閱讀 5752

public

class user

public string getname()

// pass的setter和getter方法

public

void

setpass(string pass)

public string getpass()

}

action裡包含了乙個user型別的屬性,這個屬性需要進行型別轉換,struts2框架接受到http請求引數後,要將這些請求引數封裝成user物件。

struts2提供的ognl表示式允許開發者無須任何特殊處理,只需要在定義表單域時使用ognl表示式來定義表單域的name屬性,jsp頁面**如下。

action="login">

name="user.name"

label="使用者名稱"/>

name="user.pass"

label="密碼"/>

colspan="2">

value="轉換"

theme="******"/>

value="重填"

theme="******"/>

td>

tr>

s:form>

上面**定義了兩行單行文字框,對應兩個請求引數,表單請求引數名並不是普通引數,而是user.name,user.pass的形式,這就是ognl表示式的形式,struts2會把user.name引數的值複製給action例項的user屬性的name屬性,並將user.pass引數的值賦值給action例項的user屬性的pass屬性。

struts2通過這種方式可以將普通請求引數轉換成復合型別物件,但在使用時有幾點需要注意。

1. 由於struts2將通過反射來建立乙個復合類(user類)的例項,因此系統必須為該復合類提供無參構造器。

2. 如果希望使用user.name請求引數的形式為action例項的user屬性的name屬性賦值,則必須為user屬性對應的復合類(user類)提供setname()方法,因為struts2是通過呼叫該方法來為該屬性賦值的。action類中還應該包含getuser()方法。

極端情況下,可以直接產生collection,或者map例項。看如下的action類片段。

public

class

loginaction

extends

actionsupport

public mapgetusers()

public string execute() throws exception

addactionmessage("登入失敗!!");

return error;

}}

這裡action類定義了乙個users屬性,該屬性的型別是map

action="login">

name="users['one'].name"

label="第one個使用者名稱"/>

name="users['one'].pass"

label="第one個密碼"/>

name="users['two'].name"

label="第two個使用者名稱"/>

name="users['two'].pass"

label="第two個密碼"/>

colspan="2">

value="轉換"

theme="******"/>

value="重填"

theme="******"/>

td>

tr>

s:form>

將表單域的name屬性設定為「action屬性名[『key值』].屬性名」的形式,其中「action屬性名」是action類裡包含的map型別屬性,後乙個屬性名則是map物件裡復合型別物件的屬性名。通過這種方式,struts2可以將http請求引數轉換成map屬性。

如果要訪問action的map型別,也可以用ognl表示式,**如下。

key為one的使用者名為:value="users['one'].name"/>

key為one的密碼為:value="users['one'].pass"/>

key為two的使用者名為:value="users['two'].name"/>

key為two的密碼為:value="users['two'].name"/>

如果把loginaction中的users屬性改為list,即如果需要struts2將使用者請求引數封裝為list型別屬性,一樣可以利用ognl表示式做到,只要通過索引來指定要將請求引數轉換成list的哪個元素,下面jsp頁面裡的表單元素的name屬性可實現將http請求引數轉換成list型別。

action="login">

name="users[0].name"

label="第乙個使用者名稱"/>

name="users[0].pass"

label="第乙個密碼"/>

name="users[1].name"

label="第二個使用者名稱"/>

name="users[1].pass"

label="第二個密碼"/>

colspan="2">

value="轉換"

theme="******"/>

value="重填"

theme="******"/>

td>

tr>

s:form>

上面**中定義表單域時指定第乙個文字域的name為users[0].name,struts2將會把該文字域所代表的請求引數轉換成users集合第乙個元素的name屬性。

如果想輸出action中list屬性裡各集合元素的屬性值,則可通過在集合屬性後增加索引來訪問,**如下。

第乙個user例項的使用者名為:value="users[0].name"/>

第乙個user例項的密碼為:value="users[0].pass"/>

第二個user例項的使用者名為:value="users[1].name"/>

第二個user例項的密碼為:value="users[1].name"/>

struts2 型別轉換

繼承strutstypeconverter 類或者直接去實現 ognl.defaulttypeconverter 類 strutstypeconverter 類是對defaulttypeconverter 類的包裝。實現 convertfromstring 和converttostring 方法 然...

struts2型別轉換

一 內容提要 1.型別轉換概述 2.型別轉換出錯時如何進行處理 轉到哪個頁面 顯示什麼錯誤訊息 3.自定義型別轉換器 4.型別轉換與複雜物件配合使用 二 型別轉換概述 從乙個html表單到乙個action物件,型別轉換是從字串到非字串http沒有 型別 的概念,每一項表單輸入只可能是乙個字串或乙個字...

Struts2型別轉換

實體類 public class user struts.xml配置 struts型別轉換的api struts2的型別轉換器實際上是基於ognl實現的,在ognl專案中有乙個ognl.typeconverter介面,這個介面就是實現型別轉換器必須實現的介面。該介面定義如下 public inte ...