Struts学习(三):参数封装
1.静态参数封装
<action name="action1" class="action.Demo1Action" method="addUser">
<!-- 使用注入的方式,给动作类的参数赋值 -->
<param name="username">aaa</param>
<param name="password">bbb</param>
</action>
2.动态参数封装
2.1动态参数封装的第一种方式(数据模型与动作类写在一起)
import com.opensymphony.xwork2.ActionSupport;
/**
* 动作参数封装,第一种情况:
* 数据模型与动作类写在一起
*
* */
public class Demo2Action extends ActionSupport {
private String username;
private String password;
public String addUser(){
System.out.println(username+","+password);
return null;//不返回任何结果视图,NONE常量
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
表单中的name属性必须和动作类中的实体的属性名相同
<form action="${pageContext.request.contextPath }/action2.action" method="post">
<%--表单中的name属性必须和动作类中的实体的属性名相同 --%>
用户名:<input name="username" type="text"><br/>
密码:<input name="password" type="text"><br/>
<input type="submit" value="提交">
</form>
2.2动态参数封装的第二种方式(数据模型与动作类分开)
import com.opensymphony.xwork2.ActionSupport;
import domain.User;
/**
* 动作参数封装,第二种情况:
* 数据模型与动作类分开
*
* */
public class Demo3Action extends ActionSupport {
//定义数据模型对象
private User user;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public String addUser(){
System.out.println(user.getUsername()+","+user.getPassword());
return null;//不返回任何结果视图,NONE常量
}
}
表单中的name属性必须是对象.属性名
<form action="${pageContext.request.contextPath }/action3.action" method="post">
用户名:<input name="user.username" type="text"><br/>
密码:<input name="user.password" type="text"><br/>
<input type="submit" value="提交">
</form>
原理:
1. Struts框架,先调用getUser方法,看看对象是否存在,如果不存在,反射为我们创建一个对象
2. 如果对象不存在,创建一个对象,调用setUser方法
3. 存在不存在都再次调用getUser方法,得到该对象,调用对应的set属性,为属性赋值
2.3动态参数封装的第三种方式(模型驱动)
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import domain.User;
/**
* 动作参数封装,第三种情况:模型驱动
* 要想实现模型驱动,必须数据模型和动作类分开
* 实现模型驱动的步骤:
* 1.实现一个ModelDriven的接口
* 2.实现接口中的抽象方法getModel()
* 3.在使用模型驱动的时候,数据模型必须由我们来实例化
* */
public class Demo4Action extends ActionSupport implements ModelDriven<User>{
//定义数据模型对象
private User user = new User();
//该方法返回的是数据模型
public User getModel() {
return user;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public String addUser(){
System.out.println(user.getUsername()+","+user.getPassword());
return null;//不返回任何结果视图,NONE常量
}
}
表单中的name属性必须是实体中的属性名
<form action="${pageContext.request.contextPath }/action4.action" method="post">
<%--表单中的name属性必须是实体中的属性名 --%>
用户名:<input name="username" type="text"><br/>
密码:<input name="password" type="text"><br/>
<input type="submit" value="提交">
</form>