【8】OGNL的入門

一、OGNL的概述

 

1、什麼是OGNL

         OGNL比EL強大很多被的表達式語言(EL獲取的數據來源與四個作用域,EL提供11個web對象),OGNL是一個獨立的表達式語言。Struts2發現OGNL功能很強大,將OGNL引入到自身當中,作爲自己的表達式語言。

         OGNL全稱是對象圖導航語言(Object-Graph Navigation Language),可以通過某種表達式語法,存取Java對象的任意屬性,調用Java對象的方法,同時能夠自動實現必要的類型轉換。

 

2、OGNL的作用

l  訪問對象的方法。如:objName.methodName();

l  訪問對象的靜態方法:@java.lang.String@format();

l  支持賦值操作和表達式串聯

l  訪問OGNL上下文(OGNL context)和ActionContext

l  操作集合對象

3、OGNL的要素

(1)表達式:帶有語法含義的字符串,規定了“做什麼”
(2)Root:OGNL的操作對象,規定了“對誰操作”
(3)OgnlContext對象:Root對象所在的環境就是OGNL的上下文環境(Context),規定了“在哪裏進行”

注:上下文環境Context是一個Map類型的對象,在表達式中訪問Context中的對象,需要使用“#”加上對象名稱:#對象名稱

二、OGNL的入門

1、OGNL在Java工程使用(瞭解)

@Test

    // 獲得對象的方法

    public void demo1() throws OgnlException{

        // 獲得數據:

        OgnlContext context = new OgnlContext();

        Object value = Ognl.getValue("'helloworld'.length()"contextcontext.getRoot());

        System.out.println(value);

    }

   

    @Test

    // 調用對象的靜態方法

    public void demo2() throws OgnlException{

        // 獲得數據:

        OgnlContext context = new OgnlContext();

        Object value = Ognl.getValue("@java.lang.Math@random()"contextcontext.getRoot());

        System.out.println(value);

    }

   

    @Test

    /**

     * OGNL獲得root的數據

     * * root中一般存對象

     */

    public void demo3() throws OgnlException{

        Product product = new Product();

        product.setName("電視機");

        product.setPrice(2999d);

        // 獲得Context對象:

        OgnlContext context = new OgnlContext();

        context.setRoot(product);

       

        Object value = Ognl.getValue("name"contextcontext.getRoot());

        System.out.println(value);

    }

   

    @Test

    /**

     * OGNL獲得context的數據

     * * context中存入的List集合,其他的普通的值

     * * 獲取context數據需要加#

     */

    public void demo4() throws OgnlException{

        // 獲得Context對象:

        OgnlContext context = new OgnlContext();

        context.put("key""郝強寶");

       

        Object value = Ognl.getValue("#key"contextcontext.getRoot());

        System.out.println(value);

    }

注:root中一般存對象。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章