1. 程式人生 > >struts2[3.4]OGNL表示式語句與struts2框架的結合原理--引數賦值

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:

再重新整理一下: