我们在学习web基础的时候,我们知道使用那个EL表达式能够访问application、request、session等域里面的属性值,但是在struts2中,El表达式为何能够访问valueStack中对象的属性呢?
其实很简单,原因是Struts2中对HttpServletRequest作了进一步的封装,其源代码如下:
//首先先继承request实现类,(wrapper:封装)
public class StrutsRequestWrapper extends HttpServletRequstWrapper(){
//继承父类方法
public StrutsRequestWrapper (HttpServletRequest req){
super(req);
}
public Object getAttribute(String s){
.................
}
//先得到ActionContext对象
ActionContext ctx=ActionContext.getContent();
//直接先从request域中获取s属性的值,
Object attribute=super.getAttribute(s);
if(ctx!=null){
//如果从request中没能获取到s的属性值,那么就从ValueStack中获取
if(attribute==null){
//.........................
ValueStack stack=ctx.getValueStack();
aattribute=stack.findValue();
//...........................
}
}
}
搞定!
------------------------------------------------------------------------------------------------苦难不是博得同情的资本,唯有不断奋斗才能改变命运!