原始方式获取表单数据封装到实体类
public class User {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
// TODO Auto-generated method stub
return name+age;
}
}
public class DataAction extends ActionSupport {
@Override
public String execute() throws Exception {
// TODO Auto-generated method stub
//1.获取表单数据
HttpServletRequest request=ServletActionContext.getRequest();
String username=request.getParameter("username");
int userage=Integer.parseInt(request.getParameter("userage"));
//2.把数据封装到实体类对象里面
User user=new User();
user.setName(username);
user.setAge(userage);
System.out.println(user);
return NONE;
}
}
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="dataAction">
naeme:<input type="text" name="username" />
age:<input type="text" name="userage" />
<input type="submit" value="提交">
</form>
</body>
</html>
1.属性封装
在Struts2框架中,表单的提交的数据会自动注入到与Action对象相对应的属性。
要求:
jsp中表单的name属性与Action中的属性的一样。要注入属性值的Action对象,必须为该属性提供setXXX()方法,因为Struts2的内部实现是按照JavaBean规范中提供的setter方法,自动为属性注入值所以一般在Action中注入的属性的属性名与表单对应控件的name值相等,且该属性提getXXX()、setXXX()方法。
public class User {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="dataAction">
naeme:<input type="text" name="name" />
age:<input type="text" name="age" />
<input type="submit" value="提交">
</form>
</body>
</html>
public class DataAction extends ActionSupport {
//属性封装
//1.定义变量,变量要与提交的表单name属性值一样
private String name;
private int age;
//2.生成变量的get与set方法
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String execute() throws Exception {
// TODO Auto-generated method stub
System.out.println(name+","+age);
return NONE;
}
}
注意:使用属性封装获取表单数据到属性里面,不能把数据直接封装到实体类对象里卖。
2.模型驱动
使用模型驱动封装,可以把表单数据直接封装到实体类对象里面
实现步骤:
(1),action实现接口ModelDriven;
(2),实现接口里的getModel()方法(把创建的对象返回);
(3),在action里面创建实体类对象。
public class User {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
// TODO Auto-generated method stub
return name+age;
}
}
public class DataAction extends ActionSupport implements ModelDriven{
//模型驱动封装
//前提要求:表单name属性值与实体类属性要一样
private User user=new User();
@Override
public String execute() throws Exception {
// TODO Auto-generated method stub
System.out.println(user);
return NONE;
}
@Override
public Object getModel() {
// TODO Auto-generated method stub
return user;
}
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="dataAction">
naeme:<input type="text" name="name" />
age:<input type="text" name="age" />
<input type="submit" value="提交">
</form>
</body>
</html>
3.表达式封装
使用表答式封装可以把表单数据封装到实体类对象里面。
第一步:在action类里面声明实体类;
第二步:生成实体类变量的get与set方法;
第三步:在表单输入项的name属性值里面写表达式形式。
public class User {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
// TODO Auto-generated method stub
return name+age;
}
}
public class DataAction extends ActionSupport {
//表达式封装
//1。声明实体类
private User user;
//2.生成实体类变量的get与set方法
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
@Override
public String execute() throws Exception {
// TODO Auto-generated method stub
System.out.println(user);
return NONE;
}
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="dataAction">
naeme:<input type="text" name="user.name" />
age:<input type="text" name="user.age" />
<input type="submit" value="提交">
</form>
</body>
</html>