fykyx521  
          日歷
          <2025年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345
          統(tǒng)計(jì)
          • 隨筆 - 2
          • 文章 - 2
          • 評(píng)論 - 0
          • 引用 - 0

          導(dǎo)航

          常用鏈接

          留言簿(1)

          隨筆檔案

          文章檔案

          搜索

          •  

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

           

          OGNL框架的使用入門(mén)(一)

          關(guān)鍵字: OGNL 例子
              OGNL是Object-Graph Navigation Language的縮寫(xiě),它是一種功能強(qiáng)大的表達(dá)式語(yǔ)言(Expression Language,簡(jiǎn)稱為EL),通過(guò)它簡(jiǎn)單一致的表達(dá)式語(yǔ)法,可以存取對(duì)象的任意屬性,調(diào)用對(duì)象的方法,遍歷整個(gè)對(duì)象的結(jié)構(gòu)圖,實(shí)現(xiàn)字段類型轉(zhuǎn)化等功能。
              開(kāi)源框架OGNL就是基于該表達(dá)式語(yǔ)言的一個(gè)實(shí)現(xiàn),你可以從http://www.ognl.org得到ognl.jar,源碼和一些文檔。本文主要通過(guò)一個(gè)例子講述通過(guò)Java Main函數(shù)如何使用ognl.jar。
              當(dāng)然,首先得建立你的工程,然后把ognl.jar引入到你的類路徑中。同時(shí)把junit.jar也引入到你的類路徑,因?yàn)楸疚牡睦拥臏y(cè)試代碼需要用到j(luò)unit.jar。
              然后建立Java類Company.java,User.java。這兩個(gè)類只是簡(jiǎn)單的JavaBean。代碼如下:
          Java代碼 復(fù)制代碼
          1. /**  
          2.  * 公司對(duì)象  
          3.  * */  
          4. public class Company {   
          5.     /**  
          6.      * 公司名字  
          7.      * */  
          8.     private String companyName;   
          9.     public String getCompanyName() {   
          10.         return companyName;   
          11.     }   
          12.     public void setCompanyName(String companyName) {   
          13.         this.companyName = companyName;   
          14.     }   
          15. }   
          16. /**  
          17.  * 用戶對(duì)象  
          18.  * */  
          19. public class User {   
          20.        
          21.     /**  
          22.      * 姓名  
          23.      * */  
          24.     private String name;   
          25.        
          26.     /**  
          27.      * 所在公司  
          28.      * */  
          29.     private Company company;   
          30.     public String getName() {   
          31.         return name;   
          32.     }   
          33.     public void setName(String name) {   
          34.         this.name = name;   
          35.     }   
          36.     public Company getCompany() {   
          37.         return company;   
          38.     }   
          39.     public void setCompany(Company company) {   
          40.         this.company = company;   
          41.     }   
          42.   
          43. }   
          44.      

              接著,建立類TestOngl.java,主要的測(cè)試代碼都在該類中。
          Java代碼 復(fù)制代碼
          1. package ognltest;   
          2.   
          3. import java.util.HashMap;   
          4. import java.util.Map;   
          5.   
          6. import junit.framework.TestCase;   
          7. import ognl.Ognl;   
          8. import ognl.OgnlException;   
          9.   
          10. public class TestOngl extends TestCase{   
          11.     //此處為類中的代碼。   
          12. }  

              類中的第一方法為,testOgnlSimpleProperty,演示了如何用Ognl從一個(gè)簡(jiǎn)單對(duì)象中取屬性值。代碼如下:
          Java代碼 復(fù)制代碼
          1. /**  
          2.      * 測(cè)試簡(jiǎn)單屬性  
          3.      * */  
          4.     public void testOgnlSimpleProperty()   
          5.     {   
          6.         User user=new User();   
          7.         user.setName("abc");   
          8.         try {   
          9.             Object result = Ognl.getValue("name",user);//********(1)   
          10.             System.out.println("***簡(jiǎn)單屬性**********result::"+result);   
          11.             //輸出:***簡(jiǎn)單屬性**********result::abc   
          12.         Company com=new Company();   
          13.         com.setCompanyName("某某科技有限公司");   
          14.         user.setCompany(com);   
          15.            
          16.         result=Ognl.getValue("company.companyName",user);//*******(2)   
          17.         System.out.println("***嵌套屬性**********result::"+result);   
          18.         //輸出:***嵌套屬性**********result::某某科技有限公司   
          19.         } catch (OgnlException e) {   
          20.             // TODO Auto-generated catch block   
          21.             e.printStackTrace();   
          22.         }   
          23.     }  


              其中行(1)中的”name”,行(2)中的” company.companyName”就是表達(dá)式語(yǔ)言了,只不過(guò)這兩個(gè)表達(dá)式是最但的表達(dá)式了。
              類中的第二方法為,testFromMap,演示了如何用Ognl從一個(gè)Map中取對(duì)象中取對(duì)象或?qū)ο蟮膶傩灾怠4a如下:
          Java代碼 復(fù)制代碼
          1. /**  
          2.      * 測(cè)試從Map中取  
          3.      * */  
          4.     public void testFromMap() throws OgnlException   
          5.     {   
          6.         Map distObject=new HashMap();   
          7.         distObject.put("abc","10000");   
          8.         Object result = Ognl.getValue("abc",distObject);//********(1)   
          9.            
          10.         System.out.println("***從Map中取簡(jiǎn)單屬性**********result::"+result);   
          11.         //輸出:***從Map中取簡(jiǎn)單屬性**********result::10000   
          12.         User user=new User();   
          13.         user.setName("myName");   
          14.         distObject.put("user",user);   
          15.         result = Ognl.getValue("user.name",distObject);//********(2)   
          16.         System.out.println("***從Map中取嵌套屬性**********result::"+result);   
          17.         //輸出***從Map中取嵌套屬性**********result::myName   
          18.            
          19.     }  


              好了,通過(guò)這個(gè)例子,相信大家知道Ognl表達(dá)式是怎么一回事了,也應(yīng)該了解怎么使用ognl.jar。不妨大家自己動(dòng)手去聯(lián)系一下這個(gè)例子,感受一下ognl的強(qiáng)大之處。
              其實(shí),現(xiàn)在流行的MVC框架webwork,struts2都用到了OGNL,如果你學(xué)會(huì)了OGNL的基礎(chǔ)知識(shí),那么你在學(xué)webwork中的OGNL時(shí),或者struts2中的OGNL時(shí),也就輕車(chē)熟路了。
          接下去的章節(jié)將更進(jìn)一步講述OGNL的使用。Qq: 916932073。
          posted on 2009-03-03 14:18 閱讀(104) 評(píng)論(0)  編輯  收藏

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


          網(wǎng)站導(dǎo)航:
           
           
          Copyright © 康 Powered by: 博客園 模板提供:滬江博客
          主站蜘蛛池模板: 互助| 全椒县| 麟游县| 左权县| 岑溪市| 闸北区| 沿河| 和顺县| 梁河县| 乐至县| 若羌县| 嘉荫县| 廊坊市| 正定县| 泽库县| 达日县| 丰台区| 曲阳县| 武定县| 河源市| 兰考县| 长兴县| 探索| 皋兰县| 孟津县| 石泉县| 麻江县| 海安县| 江北区| 大港区| 惠来县| 成安县| 通许县| 浦县| 岑巩县| 都兰县| 金秀| 右玉县| 保定市| 阳原县| 和平区|