一、属性驱动
1.提供属性set方法的方式(无需get方法)
<form action="${pageContext.request.contextPath }/addUser_addCustomer" method="post">
用户名:<input type="text" name="username"><br>
年龄:<input type="text" name="age"><br>
生日:<input type="text" name="birthday"><br>
<input type="submit" value="提交">
</form>
Action类中方法,通过定义与前端页面参数名相同的属性名称和属性的set方法,无需get方法,获取参数值
public class UserAction extends ActionSupport{
/*属性驱动方式*/
private String username;
//自动类型转换,只能转换8大基本类型和对应的包装类
private Integer age;
//支持特定类型字符串转换为Date,例如yyyy-MM-dd
private Date birthday;
public String addCustomer() throws Exception {
System.out.println(username + "-" + age + "-" + birthday);
return "success";
}
public void setUserName(String username){
this.username = username;
}
public void setAge(Integer age){
this.age= age;
}
public void setBirthday(Date birthday){
this.birthday= birthday;
}
}
2.页面中提供OGNL表达式方式(user.username,T对象,List,Map需要get与set方法)
前端页面参数名称修改为,Action类中相关对象.名称
<form action="${pageContext.request.contextPath }/addUser_addCustomer" method="post">
用户名:<input type="text" name="user.username"><br>
年龄:<input type="text" name="user.age"><br>
生日:<input type="text" name="user.birthday"><br>
<input type="submit" value="提交">
</form>
Action类中,需要get|set方法,参数封装是有struts2的拦截器param,帮我们做到的。如果不提供get方法,拦截器就无法拿到User对象,进行对每个参数生成一个新的User对象,向里面封装数据。如果提供了get方法,拦截就可以获取唯一User对象进行参数封装。
public class UserAction extends ActionSupport{
//提供一个User对象,和其get|set方法
private User user;
public String addCustomer() throws Exception {
System.out.println(user);
return "success";
}
public User getUser(){
return user;
}
public void setUser(User user){
this.user = user;
}
}
二、模型驱动(ModelDriven<T>接口)--只能向一个对象封装
<form action="${pageContext.request.contextPath }/addUser_addCustomer" method="post">
用户名:<input type="text" name="username"><br>
年龄:<input type="text" name="age"><br>
生日:<input type="text" name="birthday"><br>
<input type="submit" value="提交">
</form>
Action类需要实现ModelDriven<T>接口,Action类中方法无需get|set方法 ,但在Action中的Model对象必须实例化
public class UserAction extends ActionSupport implements ModelDriven<User>{
//无需get|set方法,必须手动实例化对象
private User user = new User();
public String addCustomer() throws Exception {
System.out.println(user);
return "success";
}
@Override
public User getModel() {
return user;
}
}