1.三种方式:属性驱动、对象驱动、模型驱动
2.测试
2.1模型驱动:
2.1.1(深入了解框架原理的操作方式)实现模型驱动只需在赋值前,将参数的对象压入栈顶即可!所以,在未使用拦截器实现Preparable这个接口时,Preparable就不能调用prepare()这个方法,在未做准备工作(未调用prepare()这个方法)之前,我们就不能在赋值前将参数的对象压入栈顶!
(赋值前,咱们看一下struts-default.xml的源码,看一下啥叫赋值前?
所以,必须先在prams之前给参数赋值!即使用prepare或者modelDriven。
)
Demo2Action.java:
package com.aisino.c_param;
import com.aisino.bean.User;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.util.ValueStack;
public class Demo2Action extends ActionSupport {
private User u = new User();
@Override
public String execute() throws Exception {
//压入栈顶
//1.获得值栈
ValueStack vs = ActionContext.getContext().getValueStack();
//2.将u压入栈顶
vs.push(u);
System.out.println(u);
return SUCCESS;
}
}
测试一下,访问http://localhost:8080/sturts2_day03Test/Demo2Action,在输入框中输入ace:
点击提交:
所以,在Demo2Action.java中需要实现这个接口,并调用她的方法。
Demo2Action.java:
package com.aisino.c_param;
import com.aisino.bean.User;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.Preparable;
import com.opensymphony.xwork2.util.ValueStack;
public class Demo2Action extends ActionSupport implements Preparable{
private User u = new User();
@Override
public String execute() throws Exception {
System.out.println(u);
return SUCCESS;
}
@Override
public void prepare() throws Exception {
//压入栈顶
//1.获得值栈
ValueStack vs = ActionContext.getContext().getValueStack();
//2.将u压入栈顶
vs.push(u);
}
}
测试一下,访问http://localhost:8080/sturts2_day03Test/Demo2Action,输入isleiyi,结果:
2.1.2(平常使用方式)直接实现modelDriven接口(她已经帮我们实现了压栈的操作了,源码为证:
)就可以省去压入栈顶的操作!
Demo2Action.java:
package com.aisino.c_param;
import com.aisino.bean.User;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import com.opensymphony.xwork2.Preparable;
import com.opensymphony.xwork2.util.ValueStack;
public class Demo2Action2 extends ActionSupport implements ModelDriven<User>{
private User u = new User();
@Override
public String execute() throws Exception {
System.out.println(u);
return SUCCESS;
}
@Override
public User getModel() {
return u;
}
}
测试:输入李雷
结果:
欸哟,乱码,咱们把表单提交方式设置为POST:
再刷新一下: