我们在前端写的表单提交的数据一般都有相应的数据库进行存储,那么我们可能从后端获取数据时可能是这样获取的
eg:用户注册操作(前端的name属性有 uname,upwd,uaddress,uaccount…);
后端通过之前的struts2框架将数据通过action传递给后端
public class registerUser extends ActionSupport{
public String execute(){
HttpServletRequest request = ServletActionContext.getRequest();//获取request请求
String uname = request.getParameter("uname");
String upwd = request.getParameter("upwd");
String uaddress = request.getParameter("uaddress");
String uaccount = request.getParameter("uaccount");
//封装到实体类中
User reUser = new User(uname,upwd,uaddress,uaccount);
//然后将实体类传递给业务层处理
return NONE;
}
}
而且注册的用户的信息远不止上面的这些 当遇到属性非常多的情况下,我们就要写非常多的request.getParameter(“name”);获取用户的信息.而struts2帮我们很好的解决了这样繁琐的问题
属性封装
步骤1. 在前端的表单action中写注册action的路径<form action ="${pageContext.request.contextPath}/registerAction.action">
步骤2. 在struts.xml 中的action中配置前端的<action name="registerAction" class="com.sofency.action.registerUser"></action>
步骤3. 在registerUser中这样写
public class registerUser extends ActionSupport{
private String uname;
private String upwd;
private String uaddress;
private String uaccount;//注意 属性的名字要和前端name的值一样
public String execute(){
System.out.println(uname,upwd,uaddress,uaccount);//会输出前端输入的值
//神奇吧 但是我们将对象封装的话还是要自己写属性名进行封装到类中
//eg
User reUser = new User();
reUser.setUname(uname);
reUser.setUname(upwd);
reUser.setUname(uaddress);
reUser.setUname(uaccount);
//也可以这样封装
// User reUser = new User(uname,upwd,uaddress,uaccount);
//但是还要写很多的属性名字
//那么框架可不可以帮我们将属性前端的数据封装成对象哪
//当然可以,也就是下面介绍的模型驱动封装
return NONE;
}
}
模型驱动封装
上面我们介绍属性型封装的缺陷是需要我们自己来创建对象 模型驱动就是为它量身制作
实现步骤
- action 中实现ModelDriven(泛型)接口
- 在action里面创建实体类对象
- 实现接口中的getModel方法 把对象返回
在Action 里面这样写
public class registerUser extends ActionSupport implements ModelDriven<User>{
//注意表单的name属性名 和实体类中的属性名要保持一致
private User user = new User();//创建实体类对象
public User getModel(){//实现getModel()方法
return user;
}
public String execute(){
System.out.println(user.getUname()+"-"+user.getUpwd()+"-"+user.getUaddress());
return NONE;
}
}
在一个action中可以使用属性封装,模型驱动封装获取表单数据,但是
不能既使用属性封装,又使用模型驱动封装来获取同一表单数据,
如果同时使用的话 只会执行模型驱动封装
表达式封装
- 表单如下
<form action="${pageContext.request.Contextpath}/registerUser.action" method='post'>
uname<input type='text' name='user.uname' /><br>
upwd<input type='text' name='user.upwd' /><br>
uaddress<input type='text' name='user.uaddress' /><br>
uaccount<input type='text' name='user.uaccount' />
<input type="submit" value="提交">
</form>
- struts.xml中配置action的路径
<action name="registerUser" class="com.sofency.action.RegisterAction">
- 在registerUser中如下配置
- 创建实例对象
private User user;
- 设置对象的set和get方法
public void setUser(User user){ this.user=user; } public User getUser(User user){ return user; }
- 创建实例对象