概述
我们知道要处理来自客户端的信息的一个重要方面便是对数据的处理,而为了处理这些数据,第一步要做的就是得到这些数据,在struts2中由于拦截器的存在,会使得来自页面的内容首先按顺序经过特定的拦截器栈,在栈中的params拦截器可以通过不同的方式获取数据
今天要讨论的获取数据的方式大致分为了三种
其一:属性驱动
其二:对象驱动
其三:模型驱动
属性驱动
下面首先介绍第一种获取参数的方式:属性驱动
我们知道一个变量要能被称为属性,那么有一点很重要,那就是,这个变量需要有相对应的get与set方法
//方式一:准备与参数键名称相同的属性即可(含有get set方法)
//每次请求action都会创建一个action实例对象
//action是线程安全的
private String name;
//struts2可以完成一定程度的数据类型
//可以完成八大基本数据类型和其对应的包装类之间的转换
//还可以转化date(util包下)
private Integer age;
//只支持1990-3-2格式
private Date birthday;
@Override
public String execute() throws Exception {
// TODO Auto-generated method stub
System.out.println(name);
ActionContext.getContext().put("name", name);
return SUCCESS;
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
对象驱动
当然这里的对象驱动不是女朋友,而是需要建立一个要封装的这个类的对象,同样的,作为一个属性,需要为其提供get与set方法,那么很容易看出,这种方法的局限性,即它只能够得到一个特定参数集,在hibernate的基础上的话,也就意味着,只能得到数据库的相应字段
private User_1 user;
public User_1 getUser() {
return user;
}
public void setUser(User_1 user) {
this.user = user;
}
public String to_user() throws Exception {
System.out.println(user);
ActionContext.getContext().put("name", user.getName());
return SUCCESS;
}
以上两种方式在创建action的时候只需要继承actionsupport,即:
public class Demo1 extends ActionSupport{}
模型驱动
与以上两种方式不同的是,模型驱动需要事先modledriven接口
其一需要指明要封装到的对象,
其二需要重写 getModel 方法
即:
public class Demo2Action implements ModelDriven<User_1>{
private User_1 user = new User_1();//成员变量不需要get set
public String execute() throws Exception{
System.out.println(user);
ActionContext.getContext().put("name", user.getName());
return "success";
}
@Override
public User_1 getModel() {
//user是需要把参数封装到哪个对象之中
return user;
}
}
下边给出不同的参数获取方式在页面的书写方式
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
属性驱动规范
<form action="${pageContext.request.contextPath}/form_getpara ">
用户名<input type="text" name="name"><br>
<input type="submit" value="提交">
</form>
对象驱动的规范
<form action="${pageContext.request.contextPath}/form_getpara_to_user ">
用户名<input type="text" name="user.name"><br>
年龄<input type="text" name="user.age"><br>
生日<input type="text" name="user.birthday"><br>
<input type="submit" value="提交">
</form>
模型驱动规范
<form action="${pageContext.request.contextPath}/model ">
用户名<input type="text" name="name"><br>
年龄<input type="text" name="age"><br>
生日<input type="text" name="birthday"><br>
<input type="submit" value="提交">
</form>
封装List规范
<!-- 设置提交方式为post可以默认解决乱码 -->
<form action="${pageContext.request.contextPath}/to_List " method="post">
用户名List<input type="text" name="list"><br>
年龄List<input type="text" name="list[2]"><br>
生日Map<input type="text" name="map['birthday']"><br>
<input type="submit" value="提交">
</form>
</body>
</html>