posts - 495,  comments - 11,  trackbacks - 0

          OGNL是Object Graph Navigation Language的縮寫,與JSP,JSF相比,OGNL是一種功能非常強(qiáng)大的針對(duì)Java的表達(dá)式語言(EL),它可用來讀取和更新Java對(duì)象的屬性。

          OGNL可以用在以下方面:
          - 用做數(shù)據(jù)綁定語言用來綁定GUI元素(textfield, combobox等)到模型對(duì)象
          - 用做數(shù)據(jù)源語言用來映射數(shù)據(jù)庫表到表模型對(duì)象
          - 用做數(shù)據(jù)綁定語言用來綁定web組件到數(shù)據(jù)模型(WebOGNLTapestryWebWork等)
          - 提供類似Jakarta Commons BeanUtils所提供的功能(讀取Java對(duì)象的屬性)

          OGNL表達(dá)式語法:
          Java標(biāo)準(zhǔn)類型:
          bool類型:true,false
          int類型:10, 0xABCD等
          long類型:100L
          float類型:1.0, 0.5F等
          double類型:0.01D
          char類型:'A', '\uFFFF'等
          字符串類型:"Hello World!"
          null

          OGNL獨(dú)自類型:
          例:10.01B,相當(dāng)于java.math.BigDecimal
          例:100000H,相當(dāng)于java.math.BigInteger

          OGNL表達(dá)式中能使用的操作符號(hào):
          OGNL表達(dá)式中能使用的操作符基本跟Java里的操作符一樣,除了能使用 +, -, *, /, ++, --, ==, !=, = 等操作符之外,還能使用 mod, in, not in等

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

          對(duì)靜態(tài)方法或變量的訪問:
          @mypkg.MyClass@myVar
          @mypkg.MyClass@myMethod()

          讀取變量值:
          例:user.address.countryName

          方法調(diào)用:
          例:user.getName()

          對(duì)象的創(chuàng)建:
          new java.net.URL("http://localhost/")

          List表達(dá)式例:
          {"green", "red", "blue"}


          Map表達(dá)式例:
          #{"key1" : "value1", "key2" : "value2", "key3" : "value3"}
          對(duì)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 閱讀(110) 評(píng)論(0)  編輯  收藏

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 临武县| 抚松县| 日喀则市| 彭州市| 黄山市| 日照市| 宾阳县| 响水县| 娱乐| 富川| 永安市| 南通市| 山西省| 枞阳县| 苏尼特右旗| 东光县| 叶城县| 砚山县| 潜江市| 会昌县| 鄂伦春自治旗| 阳春市| 芜湖市| 鸡西市| 花莲市| 电白县| 河西区| 新乡市| 宁夏| 柳江县| 囊谦县| 嘉兴市| 开平市| 蒙自县| 丰原市| 阿鲁科尔沁旗| 绵竹市| 成安县| 乐东| 隆德县| 宁南县|