一:封装数据到model中:三种
方式一:动作类Action本身作为model对象,set()方法封装搞定(一个name="params"的拦截器干的)
页面表单:<form name="test" action="&{pageContext.request.contextPth}/testAction" method="post">
用户名:<input type="text" name="username"> //这里直接用模型中的属性,保持一致即可
....
</form>
动作类封装数据:定义字段名、set()方法 字段属性和表单的name属性名保持一致
public class TextAction extends ActionSupport{
private String username;
private String password;
get()/set()方法
}
方式二:动作类和模型分开
页面表单:<form name="test" action="&{pageContext.request.contextPth}/testAction" method="post">
用户名:<input type="text" name="user.username"> //
....
</form>
动作类封装数据:定义字段名、set()方法 字段属性和表单的name属性名保持一致
public class TextAction extends ActionSupport{
private User user;
get()/set()方法
}
public class User implements Serializable{
private String username;
private String password;
get()/set()方法
}
方式三:模型驱动
页面表单:<form name="test" action="&{pageContext.request.contextPth}/testAction" method="post">
用户名:<input type="text" name="username"> //
....
</form>
动作类封装数据:定义字段名、set()方法 字段属性和表单的name属性名保持一致
public class TextAction extends ActionSupport impelements ModelDriven<User>{
private User user = new User(); //这里必须创建User对象
public User getModel(){
return user;
}//注:模型驱动实际上是由一个拦截器来完成的,modelDriven拦截器。把getModel方法返回的对象,压入一个叫做ValueStack的栈顶。struts框架就会根据表单的name属性,调用对应栈顶对象的set()方法,从而把请求参数封装进去
}
二:封装数据到集合中:
页面表单:<form name="test" action="&{pageContext.request.contextPth}/testAction" method="post">
用户名:<input type="text" name="users[0].username">
<input type="text" name="users[0].password">
<input type="text" name="users[1].username">
</form>
动作类封装数据:定义字段名、set()方法 字段属性和表单的name属性名保持一致
public class TextAction extends ActionSupport{
private Collection<User> users;
get()/set()方法
}
三:封装数据到Map中:类似Collection
页面表单:<form name="test" action="&{pageContext.request.contextPth}/testAction" method="post">
用户名:<input type="text" name="users.u1.username">
<input type="text" name="users.u1.password">
<input type="text" name="users.u2.username">
或:<input type="text" name="users['u1'].username">
<input type="text" name="users['u2'].password">
</form>
动作类封装数据:定义字段名、set()方法 字段属性和表单的name属性名保持一致
public class TextAction extends ActionSupport{
private Map<String,User> users;
get()/set()方法
}