struts2中 ValueStack的set方法与setValue方法的区别呢?
示例代码:
ActionContext.getContext().getValueStack().setValue("myname22", "ttt");
区别:
(1)setValue 方法必须要求有该属性的setter方法,否则会报错:
Error setting expression'myname22' with value 'ttt' - [unknown location]
set方法设置的属性与该action没有任何关系,所以就算action中没有该属性的setter方法,调用
ActionContext.getContext().getValueStack().set("myname22", "ttt");
也不会报错。
(2)setValue方法设置的是action的属性(action中有属性myname22),在value stack 中对应的是action的属性;
而set方法设置的属性会放在一个hashmap中,与当前的action没有任何瓜葛,但是两者都在value stack中,set方法设置的属性可以通过 <s:property value="myname22" />来取值。
共同点:
(1)setValue和set方法设置的属性可以通过
String myname2=(String)ServletActionContext.getContext().getValueStack().findValue("myname22");
来取值;
(2)在result指向的JSP页面中都可以通过 <s:property value="myname22" />来取值(setValue方法设置的属性必须要有对应的getter方法)。
action代码:
package example; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport; public class GetValueAction extends ActionSupport { private static final long serialVersionUID = 4865100826143278474L; private String myname=null; // private String myname22; @Override public String execute() throws Exception { ActionContext.getContext().getValueStack().set("myname22", "ttt"); String myname2=(String)ServletActionContext.getContext().getValueStack().findValue("myname22"); System.out.println("gg:"+myname2); // System.out.println("myname2: "+this.myname); return super.execute(); } public String getMyname() { return myname; } public void setMyname(String myname) { this.myname = myname; } // public String getMyname22() { // return myname22; // } // // public void setMyname22(String myname22) { // System.out.println("abc:"+myname22); // this.myname22 = myname22; // } // public String getMyname22() { // return myname22; // } }
总结:
set方法和setValue方法设置的属性都可以通过<s:property value="myname22" />取值。