【Struts2】:基於OGNL的型別轉換
藉助於內建的型別轉換器,Struts2可以完成字串和基本型別之間的型別轉換。除此之外,藉助於OGNL表示式的支援,Struts2允許使用另一種簡單方式將請求引數轉換成複合型別。系統的Action類的程式碼片段如下:
public class LoginAction extends ActionSupport
{
// 使用User型別的成員變數封裝請求引數
private User user;
private String tip;
// user的setter和getter方法
public void setUser(User user)
{
this.user = user;
}
public User getUser()
{
return this.user;
}
public String execute() throws Exception
{
// 通過user的name屬性和pass屬性來判斷控制邏輯
if (getUser().getName().equals("ljw")
&& getUser().getPass().equals("123") )
{
addActionMessage("登入成功");
return SUCCESS;
}
addActionMessage("登入失敗!!");
return ERROR;
}
}
從上面Action的程式碼可以看出,該請求Action裡包含一個User型別屬性——這個屬性需要進行型別轉換,Struts2框架接受到HTTP請求引數後,需要將這些請求引數封裝成User物件。但Struts2提供的OGNL表示式允許開發者無須任何特殊處理,只需要在定義表單域時使用OGNL表示式來定義表單域的name屬性。JSP頁面的表單程式碼如下:
<body>
<h3>利用OGNL的進行型別轉換</h3>
<s:form action="login">
<!-- 該表單域封裝的請求引數名為user.name -->
<s:textfield name="user.name" label="使用者名稱"/>
<!-- 該表單域封裝的請求引數名為user.pass -->
<s:textfield name="user.pass" label="密碼"/>
<tr>
<td colspan="2"><s:submit value="轉換" theme="simple"/>
<s:reset value="重填" theme="simple"/></td>
</tr>
</s:form>
</body>
上面的表單程式碼中定義了兩個單行文字框,對應兩個請求引數,請求引數名並不是普通引數名,而是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()方法。
相關文章
- 【Struts2】:Struts2的型別轉換型別
- Struts2日期型別轉換問題???型別
- 關於long型別的轉換型別
- java基礎:型別轉換castJava型別AST
- java- 型別-轉換:基本型別以及包裝型別的轉換Java型別
- Struts2的OGNL標籤詳解
- PHP 型別轉換&&型別強制轉換PHP型別
- java型別轉換與強制型別轉換(轉)Java型別
- 2. Spring早期型別轉換,基於PropertyEditor實現Spring型別
- Javascript基礎:變數型別轉換JavaScript變數型別
- C++中的向上型別轉換和向下型別轉換C++型別
- 型別轉換型別
- java 基礎型別與byte[]的轉換Java型別
- interface{} 型別的轉換型別
- golang的型別轉換Golang型別
- Struts2 - OGNL表示式和Struts2標籤庫
- 資料型別,型別轉換資料型別
- 【關於Javascript】--- 隱式型別轉換篇JavaScript型別
- [Java基礎]之 資料型別轉換Java資料型別
- [基礎] JavaScript 型別轉換及面試題JavaScript型別面試題
- Struts2 OGNL動態配置result(十八)
- JAVA基礎:Java變數型別間的相互轉換(轉)Java變數型別
- 日期型別與String型別的轉換型別
- js型別轉換JS型別
- 字元型別轉換字元型別
- 3.2 型別轉換型別
- JavaScript 型別轉換JavaScript型別
- Golang型別轉換Golang型別
- 型別轉換(cast)型別AST
- 資料型別的轉換資料型別
- java中的型別轉換Java型別
- Javascript基礎之-強制型別轉換(三)JavaScript型別
- Javascript基礎之-強制型別轉換(一)JavaScript型別
- javascript基礎(基本資料型別轉換)(六)JavaScript資料型別
- 關於Ibatis 轉換 oracle date型別的問題BATOracle型別
- Java資料型別及型別轉換Java資料型別
- 字元型別轉換成時間型別字元型別
- Oracle Long型別轉換為Clob型別Oracle型別