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("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" />取值。