Struts2值栈和ognl表达式

一、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)方法在值栈中查找。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值