请求参数的属性驱动
请求参数封装概述
封装请求参数就是把我们通过浏览器发送请求时,要传递给服务器的数据封装到指定的对象中。
这个对象一般都是实体类。但是有时就是Action中的一个属性。
也就是说,我们封装请求参数时,可以有实体类,也可以没有。
同时,我们还需要知道,请求参数的封装和请求方式无关。无论get还是post都可以封装。
属性驱动
没有实体类
要求:
表单元素的 name 属性取值必须和动作类中的属性一致(get/set 方法后面的部分)
此种情况,我们一般也称为动作类和模型在一起,也就是说我们在action中定义一些私有成员,
并且提供它们的公有get/set方法。具体代码如下:
动作类:
/**
* 请求参数的封装:
* 属性驱动:
* 没有独立的实体类(动作类和模型数据在一起)
* 它要想封装成功,有如下要求:
* 表单元素的 name 属性取值必须和动作类中的属性一致(get/set 方法后面的部分)
*
* @author Johnny.Chen
* 细节:
* struts2 框架默认为我们解决了 post 请求的乱码问题。
*/
public class Demo1Action extends ActionSupport {
private String name;
private Integer age;
public String demo1(){
System.out.println(name+","+age);
return SUCCESS;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
jsp页面:
<%--表单 1:动作类模型在一起 --%>
<form action="${pageContext.request.contextPath}/demo1.action" method="post">
用户名:<input type="text" name="name"/><br/>
年龄:<input type="text" name="age"/><br/>
<input type="submit" value="提交"/>
</form>
struts.xml:
<action name="demo1" class="cn.action.Demo1Action" method="demo1">
<result name="success">/success.jsp</result>
</action>
有实体类
使用要求:
- 首先动作类中需要提供模型的 get/set 方法 (私有成员变量)
- 模型中要提供私有成员变量的 get/set 方法 (实体类自己的get/set方法)
- 并且这些 get/set 方法必须和表单的 name 属性取值能对应上。
此种情况是,我们有独立的实体类,在action中定义的是实体类对象,并且提供get/set方法。
代码如下:
动作类:
/**
* 请求参数的封装:
* 属性驱动:
* 动作类和模型数据分开
* 使用要求:
* 首先动作类中需要提供模型的 get/set 方法
* 模型中要提供私有成员变量的 get/set 方法
* 并且这些 get/set 方法必须和表单的 name 属性取值能对应上。
*
* @author Johnny.Chen
*/
public class Demo2Action extends ActionSupport {
private User user = new User();
public String demo2(){
System.out.println(user);//输出有对象
return SUCCESS;
}
public User getUser() {
System.out.println("getUser");
return user;
}
public void setUser(User user) {
System.out.println("setUser");
this.user = user;
}
}
jsp页面:
<%--表单 2:动作类和模型分开
此时 name 属性的取值看上去是一个普通的字符串,但是实际上已经不是了。
而是一个 OGNL 表达式。
Object Graphic Navigation Language
对象 图 导航 语言
--%>
<form action="${pageContext.request.contextPath}/demo2.action" method="post">
用户名:<input type="text" name="user.name"/><br/>
年龄:<input type="text" name="user.age"/><br/>
<input type="submit" value="提交"/>
</form>
struts.xml:
<action name="demo2" class="cn.action.Demo2Action" method="demo2">
<result name="success">/success.jsp</result>
</action>