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();
}
}