Struts 2的類型轉換
所有的MVC 框架,都需要負責解析 HTTP 請求參數,并將請求參數傳給控制器組件。由于 HTTP 請求參數都是字符串類型,但是 java 是強類型的語言。,因此 MVC 框架必須將這些字符串參數轉換成相應的數據類型。
Struts 2提供了非常強大的類型轉換機制。Struts 2的類型轉換可以基于ONGL表達式,只要把HTTP參數命名為合法的ONGL表達式,就可以充分利用Struts 2的類型轉換機制。
1、Struts 2內建的類型轉換器
Struts 2可以完成大多數常用的類型轉換。這些常用的類型轉換時通過Struts 2內建的類型轉換器完成的。如下:

2、基于ONGL的類型轉換
借助于ONGL,Struts 2允許以另一種簡單方式將請求參數轉換成復合類型。
public class LoginAction implements Action {
private UserBean user;
private String tip;
public UserBean getUser() {
return user;
}
public void setUser(UserBean user) {
this.user = user;
}
public String getTip() {
return tip;
}
public void setTip(String tip) {
this.tip = tip;
}
//處理請求方法
public String execute() throws Exception {
if(getUser().getName().equals("chenssy")&&getUser().getPassword().equals("chentmt")){
setTip("轉換成功");
return SUCCESS;
}
else{
setTip("轉換失敗");
return ERROR;
}
}
} Struts 2 接收到HTTP請求參數后,需要將這些參數封裝成UserBean對象。但是我們無需作任何的處理,只需要在定義表單域是使用ONGL表達式來定義表單域的name屬性。
<s:form action="Login">
<s:textfield name="user.name" label="用戶名"></s:textfield>
<s:textfield name="user.password" label="密碼"></s:textfield>
<s:submit value="轉換" ></s:submit>
<s:submit value="重置" ></s:submit>
</s:form> 對于請求參數名是采用user.name和user.password---這就是ONGL表達式的形式。Struts 2會相應的參數賦值給Action實例的user的相應的屬性。
通過上面的方式,Struts 2可以將普通請求參數轉換成復合型類型對象,但是一般要注意下面幾點。
1、因為Struts 2將通過反射來創建一個復合類的實例,因此系統必須為該復合類提供無參數的構造器。
2、如果希望使用user.name請求參數的形式為Action實例的user屬性的name屬性賦值,則必須為user屬性對象的復合類提供setName()方法。