Struts2 是MVC中的控制器(處理請求),所以在請求過程中,數據由Strutes解決;
接受請求參數的三種類型:屬性驅動、模型驅動、域驅動。(常用的是後兩種)
1)、屬性驅動:
Html代碼塊:
<form action="loginAction" method="post">
用戶名:<input type="text" name="username"><br>
密 碼:<input type="password" name="password"><br>
<input type="submit" value="Submit">
</form>
Java代碼塊:
public class LoginAction {
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;
}
public String execute(){
System.out.println(username+password);
return "success";
}
}
總結:直接在action的POJO類中聲明與表元素一致的屬性,並聲稱匹配的get/set方法,Strutes會自動提交到action中並直接給顯影的屬性賦值;
2)、模型驅動:
Html代碼塊:
<form action="loginAction" method="post">
用戶名:<input type="text" name="username"><br>
密 碼:<input type="password" name="password"><br>
<input type="submit" value="Submit">
</form>
Action代碼塊:
public class LoginAction implements ModelDriven<User>{
private User user;
public String execute(){
System.out.println(this.user.getUsername()+this.user.getPassword());
return "success";
}
@Override
public User getModel() {
if(this.user == null){
user = new User();
}
return user;
}
總結:繼承ModelDriven接口,實現對應的getModel()方法;
3)、域驅動:
Html代碼塊:
<form action="loginAction" method="post">
用戶名:<input type="text" name="user.username"><br>
密 碼:<input type="password" name="user.password"><br>
<input type="submit" value="Submit">
</form>
Java代碼塊:
public class LoginAction {
private User user;
public void setUser(User user) {
this.user = user;
}
public User getUser() {
return user;
}
public String execute(){
System.out.println(user);
return "success";
}
}
public class User { //一個JAVABEAN
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;
}
public User(String username, String password) {
super();
this.username = username;
this.password = password;
}
@Override
public String toString() {
return "User [username=" + username + ", password=" + password
+ "]";
}
public User() {
super();
}
}
總結:通常情況下,表單元素往往對應一個實體,實體又往往單獨放在實體層中,那麼此時就需要在action中放入實體對象作爲請求參數,域驅動的方式就是把實體中的對象作爲action的屬性;
public class User { //一個JAVABEAN
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;
}
public User(String username, String password) {
super();
this.username = username;
this.password = password;
}
@Override
public String toString() {
return "User [username=" + username + ", password=" + password
+ "]";
}
public User() {
super();
}
}