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

Struts2值栈和ognl表达式

2015-12-21 16:39 567 查看
一、struts2值栈:

包含两部分:对象栈和map栈

对象栈中存放的是相关的对象,在Action类中可以通过ActionContext.getContext.getValueStack().push(Object)方法将相关的对象放在值栈栈顶,在jsp页面通过ognl表达式或EL表达式将值栈中的数据取出。

map栈中存放的是application.session.request.attr.parameters对象,在Action类中可以通过ActionContext.getContext().put(key,value)将对象存放在request域对象中,通过ActionContext.getContext().getSession().put(k,v)将对象存放在Session域中,以实现与ServletAPI的解耦。

二、Ognl表达式:

在jsp页面中使用ognl表达式获取数据时,底层实际上调用的是ValueStack的findValue(string expr)方法

findValue(String expr)查找的顺序:

1 首先在对象栈中查找指定属性,从栈顶到栈底依次查找,找到后就返回。

2.若对象栈中没有属性,则从map栈中查找对应的key值,找到就返回。

格式:

1.在jsp页面中的格式:%{ognl},只能写在struts2的自定义标签中

2.在struts2配置文件中的格式:${ognl}

语法:

user 相当于 findValue("user")  先在对象栈中查找,找不到则在map栈中查找

#user 相当于 map.get("user");
在map栈中查找

#user.name 相当于  map.get("user").getName();

表单回显:

1.对象栈栈顶对象的数据会自动回显在Struts2自定义标签中与栈顶对象相关属性相同的标签中

2.EL表达式回显:会自动在page   request     ValueStack.findValue(String expr)    session   application域中查找相关对象。

注意:在Struts2的trutsRequestWrapper类中,重写了HttpServletRequestWapper的getAttribute(String key)方法,使得当在request域中找不到对象时,调用findValue(string)方法在值栈中查找。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  struts2.0