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()方法。