You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 3 Next »

Overview


OGNL is the Object Graph Navigation Language - see http://www.ognl.org for the full documentation of OGNL. In this document we will only show a few examples of OGNL features that co-exist with Webwork.

Basic Expressions


To review basic concepts, refer to OGNL

Collections (Maps, Lists)


Dealing with collections(map,list) in webwork comes often, so here are a few examples using the select tag:
Syntax for list: {e1,e2}. This creates a List containing the String "name1" and "name2."

<webwork:select label="'lebal'" name="'nmae'" list="{'name1','name2'}" />

Syntax for map: #{key1:value1,key2:value2}. This creates a map that maps the string "foo" to the string "foovalue" and "bar" to the string "barvalue":

<webwork:select label="'lebal'" name="'nmae'" list="#{'foo':'foovalue', 'bar':'barvalue'}" />

You may need to determine if an element exists in a collection. You can accomplish this with the operations in and 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>

To select a subset of a collection (called projection), you can use a wildcard within the collection.

  • ? - All elements matching the selection logic
  • ^ - Only the first element matching the selection logic
  • $ - Only the last element matching the selection logic

To obtain a subset of just male relatives from the object person:

person.relatives.{?this.gender == 'male'}


Lambda Expressions


For all you math majors who didn't think you would ever see this one again.
fibonacci: if n==0 return 0; elseif n==1 return 1; else return fib(n-2)+fib(n-1);
fib(0) = 0
fib(11) = 89

The lambda expression is everything inside the brackets. The #this variable holds the argument to the expression, which is initially starts at 11.

<ui:property value="#fib =:[#this==0 ? 0 : #this==1 ? 1 : #fib(#this-2)+#fib(#this-1)], #fib(11)" />

Note: You are expected to have that memorized after one minute
started...

  • No labels