struts2[3.4]OGNL表示式語句與struts2框架的結合原理--引數賦值
阿新 • • 發佈:2018-11-28
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:
再重新整理一下: