struts2[3.4]OGNL表达式语句与struts2框架的结合原理--参数赋值

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:

再刷新一下:

猜你喜欢

转载自blog.csdn.net/a_cherry_blossoms/article/details/84580299