這里總結下Struts2接收參數的5種方法。
1. 使用Action的屬性
在action里面定義要接收的參數變量,並提供相應的setter,getter。定義的參數變量需要和提交參數的名稱一致。
並不用做數據類型的轉換,相應提交方式可以用get和post。
簡單舉例
如:login.action?name=yanggb&password=123456
jsp:
<form action="login" method="post" name="form1"> 用戶名:<s:textfield name="username"/><br/> 密 碼:<s:password name="password"/><br/> <s:submit value="提交"/> </form>
action:
public class LoginAction extends ActionSupport { private String username; private String password; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }
這樣,在Action就能接收到前端的請求參數。
2. 使用DomainModel
使用這種方式,在Action里面就不用定義很多的屬性,而是用Model層用到的模型,保存它的一個對象。簡單理解就是,從上面的單個參數接收,改為多個參數一起接收到一個對象中。相應提交方式可以用get和post。
簡單示例
如:login.action?loginUser.username=yanggb&loginUser.password=123456
jsp:
<form action="login" method="post" name="form1"> 用戶名:<s:textfield name="loginUser.username"/><br/> 密 碼:<s:password name="loginUser.password"/><br/> <s:submit value="提交"/> </form>
action:
public class LoginAction extends ActionSupport { // 錯誤的寫法,不能自己實例化,struts會自動實例化 // private User loginUser = new Users(); private User loginUser; public User getLoginUser() { return loginUser; } public void setLoginUser(User loginUser) { this.loginUser = loginUser; } }
entity:
public class User { private String username; private String password; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }
這樣,在Action就能接收到前端的請求參數(可以通過實體去取參數)。
3. 使用DTO--數據傳輸對象(Data Transfer Object)
它的作用是接收參數和傳遞參數,並不是項目中的實體類。
如用戶注冊時,會用到確認密碼,所以要先把參數接收過來,做處理后,再傳遞給相應方法去創建User對象。
提交參數的方式和Domain Model方式相同。
簡單示例
如:login.action?userDTO.name=yanggb&userDTO.password=123456
DTO:
public class UserDTO { private String name; private String password; private String confirm; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getConfirm() { return confirm; } public void setConfirm(String confirm) { this.confirm = confirm; } }
Action:
public class LoginAction extends ActionSupport { private UserDTO userDTO; public UserDTO getUserDTO() { return userDTO; } public void setUserDTO(UserDTO userDTO) { this.userDTO = userDTO; } public void execeute() { System.out.println("姓名: " + userDTO.getName()); } }
這樣,在Action就能接收到前端的請求參數(可以通過DTO去取參數)。
4.使用ModelDriven
在創建Action的時候,只要Action實現了ModelDriven接口,就可以去調用接口的getModel()方法去取相關對象。
相應提交方式可以用get和post。
如:login.action?username=yanggb&password=123456
jsp:
<form action="login" method="post" name="form1"> 用戶名:<s:textfield name="username"/><br/> 密 碼:<s:password name="password"/><br/> <s:submit value="提交"/> </form>
action:
public class loginAction extends ActionSupport implements ModelDriven<User> { private User user = new User(); // 手動實例化 public User getModel() { return user; // 返回實例 } }
5.使用Request對象
此方法與傳統的JSP等傳接參數一樣,即使用request.getParameter()方法來接收參數。
簡單示例
如:login.action?name=yanggb
action:
public class LoginAction extends ActionSupport { public void execeute() { String name = super.getRequest().getParameter("name"); System.out.println("姓名:" + name); // yanggb } }
這種方式幾乎是最簡單的。
"有些事情不是你努力就會有結果,有些人也不是你堅持就能夠留得住。"