struts2_day03属性封装,模型驱动封装,表达式封装

我们在前端写的表单提交的数据一般都有相应的数据库进行存储,那么我们可能从后端获取数据时可能是这样获取的

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

模型驱动封装

上面我们介绍属性型封装的缺陷是需要我们自己来创建对象 模型驱动就是为它量身制作
实现步骤

  1. action 中实现ModelDriven(泛型)接口
  2. 在action里面创建实体类对象
  3. 实现接口中的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中可以使用属性封装,模型驱动封装获取表单数据,但是
不能既使用属性封装,又使用模型驱动封装来获取同一表单数据,
如果同时使用的话 只会执行模型驱动封装

表达式封装

  1. 表单如下

<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>
  1. struts.xml中配置action的路径
    <action name="registerUser" class="com.sofency.action.RegisterAction">
  2. 在registerUser中如下配置
    • 创建实例对象
      private User user;
      
    • 设置对象的set和get方法
      public void  setUser(User user){
       		this.user=user;
       	}
       	 public User getUser(User user){
       		return user;
       	}
      
上一篇:登录注册


下一篇:ARM64平台编译stream、netperf出错解决办法 解决办法:指定编译平台为alpha [root@localhost netperf-2.6.0]# ./configure –build=