程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 詳解Java的Struts框架中棧值和OGNL的應用

詳解Java的Struts框架中棧值和OGNL的應用

編輯:關於JAVA

詳解Java的Struts框架中棧值和OGNL的應用。本站提示廣大學習愛好者:(詳解Java的Struts框架中棧值和OGNL的應用)文章只能為提供參考,不一定能成為您想要的結果。以下是詳解Java的Struts框架中棧值和OGNL的應用正文


起首懂得下OGNL的概念:
OGNL是Object-Graph Navigation Language的縮寫,全稱為對象圖導航說話,是一種功效壯大的表達式說話,它經由過程簡略分歧的語法,可以隨意率性存取對象的屬性或許挪用對象的辦法,可以或許遍歷全部對象的構造圖,完成對象屬性類型的轉換等功效。

另外,還得先需弄懂OGNL的一些常識:
1.OGNL表達式的盤算是環繞OGNL高低文停止的。
OGNL高低文現實上就是一個Map對象,由ognl.OgnlContext類表現。它外面可以寄存許多個JavaBean對象。它有一個高低文根對象。
高低文中的根對象可以直接應用名來拜訪或直接應用它的屬性名拜訪它的屬性值。不然要加前綴“#key”。

2.Struts2的標簽庫都是應用OGNL表達式來拜訪ActionContext中的對象數據的。如:<s:propertyvalue="xxx"/>。

3.Struts2將ActionContext設置為OGNL高低文,並將值棧作為OGNL的根對象放置到ActionContext中。

4.值棧(ValueStack) :
可以在值棧中放入、刪除、查詢對象。拜訪值棧中的對象不消“#”。
Struts2老是把以後Action實例放置在棧頂。所以在OGNL中援用Action中的屬性也能夠省略“#”。

5.挪用ActionContext的put(key,value)放入的數據,須要應用#拜訪。


OGNL中主要的3個符號:#、%、$:
#、%和$符號在OGNL表達式中常常湧現,而這三種符號也是開辟者不輕易控制和懂得的部門,須要時光的積聚才逐漸弄清晰……
1.#符號
#符號的用處普通有三種。

拜訪非根對象屬性,例如#session.msg表達式,因為Struts 2中值棧被視為根對象,所以拜訪其他非根對象時,須要加#前綴。現實上,#相當於ActionContext. getContext();#session.msg表達式相當於ActionContext.getContext().getSession(). getAttribute("msg") 。

用於過濾和投影(projecting)聚集,如persons.{?#this.age>25},persons.{?#this.name=='pla1'}.{age}[0]。

用來結構Map,例如示例中的#{'foo1':'bar1', 'foo2':'bar2'}。

2.%符號
%符號的用處是在標記的屬性為字符串類型時,盤算OGNL表達式的值,這個相似js中的eval,很暴力。
3.$符號
$符號重要有兩個方面的用處。

在國際化資本文件中,援用OGNL表達式,例如國際化資本文件中的代碼:reg.agerange=國際化資本信息:年紀必需在${min}同${max}之間。

在Struts 2框架的設置裝備擺設文件中援用OGNL表達式,例如:

<validators>  
  <field name="intb">  
      <field-validator type="int">  
      <param name="min">10</param>  
      <param name="max">100</param>  
      <message>BAction-test校驗:數字必需為${min}為${max}之間!</message>  
    </field-validator>  
  </field>  
</validators> 

 

示例:第一個OGNL法式

public class OGNL1 
{ 
  public static void main(String[] args) 
  { 
    /* 創立一個Person對象 */ 
    Person person = new Person(); 
    person.setName("zhangsan"); 
     
    try 
    { 
      /* 從person對象中獲得name屬性的值 */ 
      Object value = Ognl.getValue("name", person); 
 
      System.out.println(value); 
    } 
    catch (OgnlException e) 
    { 
      e.printStackTrace(); 
    } 
  } 
} 
 
class Person 
{ 
  private String name; 
 
  public String getName() 
  { 
    return name; 
  } 
 
  public void setName(String name) 
  { 
    this.name = name; 
  } 
} 

掌握台輸入:

zhangsan

可以看到我們准確的獲得了person對象的name屬性值,該getValue聲明以下:

public static <T> T getValue(String expression,Object root)throws OgnlException 
 
Convenience method that combines calls to parseExpression and getValue.  
 
Parameters: 
expression - the OGNL expression to be parsed 
root - the root object for the OGNL expression  
Returns: 
the result of evaluating the expression 

OGNL會依據表達式從根對象(root)中提取值。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved