风故故,也依依

Stand still in the wind.

导航

OGNL表达式语言介绍

OGNL是Object Graph Navigation Language的缩写,与JSP,JSF相比,OGNL是一种功能非常强大的针对Java的表达式语言(EL),它可用来读取和更新Java对象的属性。

OGNL可以用在以下方面:
- 用做数据绑定语言用来绑定GUI元素(textfield, combobox等)到模型对象
- 用做数据源语言用来映射数据库表到表模型对象
- 用做数据绑定语言用来绑定web组件到数据模型(WebOGNLTapestryWebWork等)
- 提供类似Jakarta Commons BeanUtils所提供的功能(读取Java对象的属性)

OGNL表达式语法:
Java标准类型:
bool类型:true,false
int类型:10, 0xABCD等
long类型:100L
float类型:1.0, 0.5F等
double类型:0.01D
char类型:'A', '\uFFFF'等
字符串类型:"Hello World!"
null

OGNL独自类型:
例:10.01B,相当于java.math.BigDecimal
例:100000H,相当于java.math.BigInteger

OGNL表达式中能使用的操作符号:
OGNL表达式中能使用的操作符基本跟Java里的操作符一样,除了能使用 +, -, *, /, ++, --, ==, !=, = 等操作符之外,还能使用 mod, in, not in等

变量的引用:
使用方法:#变量名
例:#this, #user.name

对静态方法或变量的访问:
@mypkg.MyClass@myVar
@mypkg.MyClass@myMethod()

读取变量值:
例:user.address.countryName

方法调用:
例:user.getName()

对象的创建:
new java.net.URL("http://localhost/")

List表达式例:
{"green", "red", "blue"}


Map表达式例:
#{"key1" : "value1", "key2" : "value2", "key3" : "value3"}
对map引用,例:map.key1

等等。

OGNL官方首页:
http://www.ognl.org/

OGNL官方文档 (2.6.9)
OGNL Language Guide (2.6.9)

附:
OGNL使用例:
  1. package com.test.ognl;   
  2. import java.util.HashMap;   
  3. import java.util.List;   
  4. import java.util.Map;   
  5.   
  6. import junit.framework.TestCase;   
  7. import ognl.Ognl;   
  8. import ognl.OgnlContext;   
  9.   
  10. public class OgnlTest extends TestCase {   
  11.     public void testGetValue() throws Exception {   
  12.          OgnlContext context = new OgnlContext();   
  13.          Book book = new Book("book1");   
  14.          context.put("book", book);   
  15.   
  16.         final String expression = "book.name";   
  17.          Object parseExpression = Ognl.parseExpression(expression);   
  18.          assertEquals("book1", Ognl.getValue(parseExpression, context));   
  19.            
  20.          book.setName("book2");   
  21.          assertEquals("book2", Ognl.getValue(parseExpression, context));   
  22.      }   
  23.        
  24.     public void testSetValue() throws Exception {   
  25.          OgnlContext context = new OgnlContext();   
  26.          Book book = new Book("book1");   
  27.          context.put("book", book);   
  28.   
  29.         final String expression = "book.name";   
  30.          Object parseExpression = Ognl.parseExpression(expression);   
  31.          Ognl.setValue(parseExpression, context, "book2");   
  32.          assertEquals("book2", book.getName());   
  33.      }   
  34.        
  35.     public void testCallStaticMethod() throws Exception {   
  36.          OgnlContext context = new OgnlContext();   
  37.   
  38.         final String expression = "@com.test.ognl.Book@test()";   
  39.          Object parseExpression = Ognl.parseExpression(expression);   
  40.          assertEquals("Hello World", Ognl.getValue(parseExpression, context));   
  41.      }   
  42.        
  43.     public void testArray() throws Exception {   
  44.          OgnlContext context = new OgnlContext();   
  45.   
  46.         final String expression = "new int[]{1, 2, 3}";   
  47.          Object parseExpression = Ognl.parseExpression(expression);   
  48.         int[] ret = (int[]) Ognl.getValue(parseExpression, context);   
  49.   
  50.          assertEquals(1, ret[0]);   
  51.          assertEquals(2, ret[1]);   
  52.          assertEquals(3, ret[2]);   
  53.      }   
  54.   
  55.     public void testList() throws Exception {   
  56.          OgnlContext context = new OgnlContext();   
  57.   
  58.         final String expression = "{1, 2, 3}";   
  59.          Object parseExpression = Ognl.parseExpression(expression);   
  60.          List ret = (List) Ognl.getValue(parseExpression, context);   
  61.   
  62.          assertEquals(new Integer(1), ret.get(0));   
  63.          assertEquals(new Integer(2), ret.get(1));   
  64.          assertEquals(new Integer(3), ret.get(2));   
  65.      }   
  66.        
  67.     public void testMap() throws Exception {   
  68.          OgnlContext context = new OgnlContext();   
  69.   
  70.         final String expression = "#{\"name\" : \"book1\", \"price\" : 10.2}";   
  71.          Object parseExpression = Ognl.parseExpression(expression);   
  72.          Map value = (Map) Ognl.getValue(parseExpression, context);   
  73.          assertEquals("book1", value.get("name"));   
  74.          assertEquals(new Integer(10.2), value.get("price"));   
  75.      }   
  76. }   
  77.   
  78. class Book {   
  79.     private int name;   
  80.   
  81.     public Book(String bookName) {   
  82.         this.name = bookName;   
  83.      }   
  84.     public int getName() {   
  85.         return name;   
  86.      }   
  87.   
  88.     public void setName(int Name) {   
  89.         this.name = name;   
  90.      }   
  91.   
  92.     // test static method   
  93.     public static String hello() {   
  94.         return "Hello World";   
  95.      }  

posted on 2009-08-12 18:19  jadmin  阅读(1366)  评论(0编辑  收藏  举报