Ognl表达式内部原理---总结

Ognl有一个上下文<Context>概念,说白了上下文就是一个Map结构,它实现了Java.Util.Map接口,在Struts2中上下文的实现为ActionContext,下面为上下文<Context>的结构示意图

 

 

 

 


OgnlContext

 

 

 

 

 

 

 

 

 


当Struts接受一个请求时,会迅速创建ActionContext,ValueStack,action,然后把action存放进ValueStack,所以action的实例变量可以被OGNL访问。

 

接下来那如何访问上下文的对象:

访问上下文对象,如#application, #session 

注意:OGNL会设定一个根对象,即ValueStack,如果要访问根对象的属性,可以省略#命名空间,直接访问该对象属性即可。

在root变量中处于第一位的叫栈顶对象,通常我们在OGNL表达式里直接写上属性的名称即可访问变量里对象的属性,搜索顺序是从栈顶对象开始寻找。

struts2中,OGNL表达式需要配合Struts标签才可以使用,如<s:property value=”name”/>

也可以通过EL表达式访问${EL},-----à原理:现在request域中查找,查找不到再到值栈中查。

如果要访问其他Context中的对象,由于他们不是根对象,需要添加#前缀。

*application对象:#application.username或者#application[‘username’],相当于ServletContext.getAttribute(“username”).

 

*parameters对象:用于访问HTTP请求参数,例如#paramters.username.相当于request.getParamter(“username”)

 

*attr对象:用于按pageàrequestàsessionàapplication顺序访问属性。

 

采用OGNL表达式创建List/Map集合对象

如果需要一个集合元素的时候,可以使用OGNL中集合想换的表达式。使用如下代码直接生成一个List对象:

 

<s:set name=”list” value=”{‘zhag’,’wang’,’xiao’}”/>

<s:iterator value=”#list”>

<s:property/>

</s:iterator>

Set标签用于将某个值方入指定范围。通过scope指定。默认放在OGNLContext中。

 

生成一个Map对象:

<s:set name=”foobar” value=”#{‘foot1’:’bar1’,‘foot2’:’bar2’, ‘foot3’:’bar3’,}”

<s:iterator value=”#foobar”>

    <s:property value=”key”/>==<s:property value=”value”/>

</s:iterator>

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值