您的位置:首页 > 编程语言 > Java开发

struts2的EL表达式和Ognl表达式

2017-06-23 15:51 316 查看
由于ValueStack(值栈)是Struts2中Ognl的根对象,如果用户需要访问值栈中的对象,在JSP页面可以直接通过下面的EL表达式访问ValueStack(值栈)中对象的属性。

$(foo)    //获得值栈中某对象的foo属性


若访问其他Context中的对象,由于他们不是根对象,所以在访问时,需要添加#前缀。

如,session对象,用来访问HttpSession。例如,

#session.userName


或者

#session['userName']


,相当于调用
ServletContext


getAttribute("userName");


为何EL表达式能够访问valueStack中对象的属性

是因为Struts2对HttpServletRequest作了进一步的封装。

public class StrutsRequestWrapper extends HttpServletRequestWrapper{
public StrutsRequestWrapper(HttpServletRequest req){
super(req);
}

public Object getAttribute(String s){
......
ActionContext ctx = ActionContext.getContext();
// 先尝试从request范围获取属性值
Object attribute = super.getAttribute(s);
if (ctx != null){
if (attribute == null)// 如果从request范围没有找到属性值,则从ValueStack中查找对象的属性值
.......
ValueStack stack = ctx.getValueStack();
attribute = stack.findValue(s);
......
}
return attribute;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  struts