WebWork 2 : OGNL
This page last changed on Dec 14, 2004 by casey.
综述OGNL就是Object Graph Navigation Language - 请访问http://www.ognl.org查看OGNL完整文档. 本文中我们仅展示几个与WebWork共存的OGNL特性.
Webwork和OGNLWebwork使用标准命名上下文(namming context)运算OGNL表达式. OGNL处理的定级对象是一个map(通常被称为context map). OGNL有一个根对象的概念 (在webwork术语中, 就是OGNLValueStack). 其他对象和根对象一起放置在context map(简称context)中, 包括session/application/request属性. 这些对象和根对象没有关系, 只是顺序存在于context map中. 因此, 为访问这些对象需要 使用#告诉ognl不要在根对象中查找, 而应当在其他context中查找 | |--request | |--application | context map---|--OgnlValueStack(root) | |--session | |--attr | |--parameters <ww: property value="myBean.myProperty"/>
要访问session, request和其他对象: ActionContext.getContext().getSession().put("mySessionPropKey", mySessionObject);
<ww: property value="#session.mySessionPropKey"/> or <ww: property value="#session['mySessionPropKey']"/> <ww: property value="#attr.mySessionPropKey"/> 集合 (Maps, Lists, Sets)在WebWork中经常要处理集合(maps, lists, sets), 因此下面是几个使用select标签的例子:list的语法: {e1,e2}. 它创建一个List, 包含字符串"name1"和"name2". <webwork:select label="'lebal'" name="'nmae'" list="{'name1','name2'}" />
map的语法: #{key1:value1,key2:value2}. 它创建一个Map, 将"foo"映射到"foovalue", "bar"映射到"barvalue": <webwork:select label="'lebal'" name="'nmae'" list="#{'foo':'foovalue', 'bar':'barvalue'}" />
有时需要判断一个元素是否包含在集合中. 可以使用下面的操作in和not in <ui:if test="'foo' in {'foo','bar'}"> muhahaha </ui:if> <ui:else> boo </ui:else> <ui:if test="'foo' not in {'foo','bar'}"> muhahaha </ui:if> <ui:else> boo </ui:else>
从对象Person中获取男性亲属的子集: person.relatives.{? #this.gender == 'male'} Lambda表达式OGNL支持基本的lamba表达式语法可以用来编写简单的函数.例如:你可能不会想到会在数学课外在见到这个. <ww:property value="#fib =:[#this==0 ? 0 : #this==1 ? 1 : #fib(#this-2)+#fib(#this-1)], #fib(11)" />
|
Document generated by Confluence on Dec 14, 2004 16:36 |