OGNL(Object?Graph?Navigation?Language),是一種表達式語言。使用這種表達式語言,你可以通過某種表達式語法,存取Java對象樹中的任意屬性、調用Java對象樹的方法、同時能夠自動實現必要的類型轉化。如果我們把表達式看做是一個帶有語義的字符串,那么OGNL無疑成為了這個語義字符串與Java對象之間溝通的橋梁。既然OGNL那么強大,那么讓我們一起來研究一下他的API,看看如何使用OGNL.
OGNL的API看起來就是兩個簡單的靜態方法:
public static Object getValue( Object tree, Map context, Object root ) throws OgnlException;
struts2框架由什么組成?public static void setValue( Object tree, Map context, Object root, Object value ) throws OgnlException
1.OGNL表達式的計算是圍繞OGNL上下文進行的。
OGNL上下文實際上就是一個Map對象,由ognl.OgnlContext類表示。它里面可以存放很多個JavaBean對象。它有一個上下文根對象。
上下文中的根對象可以直接使用名來訪問或直接使用它的屬性名訪問它的屬性值。否則要加前綴“#key”。
java field.set?2.Struts2的標簽庫都是使用OGNL表達式來訪問ActionContext中的對象數據的。如:。
3.Struts2將ActionContext設置為OGNL上下文,并將值棧作為OGNL的根對象放置到ActionContext中。
4.值棧(ValueStack) :
可以在值棧中放入、刪除、查詢對象。訪問值棧中的對象不用“#”。
框架Java,Struts2總是把當前Action實例放置在棧頂。所以在OGNL中引用Action中的屬性也可以省略“#”。
5.調用ActionContext的put(key,value)放入的數據,需要使用#訪問。
OGNL中重要的3個符號:#、%、$:
“#”主要有三種用途:
java struts、訪問OGNL上下文和Action上下文,#相當于ActionContext.getContext();下表有幾個ActionContext中有用的屬性:
名稱
作用
例子
java object。parameters
包含當前HTTP
請求參數的Map
#parameters.id[0]
java spring。作用相當于
request.getParameter("id")
request
包含當前
java.lang.integer cannot be?HttpServletRequest
的屬性
(attribute)的Map
#request.userName相當于
volatile Java,request.getAttribute("userName")
session
包含當前
HttpSession的
屬性(attribute)
的Map
#session.userName相當于
session.getAttribute("userName")
application
包含當前應用的
ServletContext
的屬性(attribute)
的Map
#application.userName相當于
application.getAttribute("userName")
attr
用于按request >
session > application
順序訪問其屬性
(attribute)
#attr.userName相當于
按順序在以上三個范圍(scope)
內讀取userName屬性,直到找到為止
用于過濾和投影(projecting)集合,如books.{?#this.price<100};
構造Map,如#{'foo1':'bar1', 'foo2':'bar2'}。
"%“符號
%符號的用途是在標志的屬性為字符串類型時,計算OGNL表達式的值,這個類似js中的eval,很暴力。
"$"符號
$符號主要有兩個方面的用途。
—??? 在國際化資源文件中,引用OGNL表達式,例如國際化資源文件中的代碼:reg.agerange=國際化資源信息:年齡必須在${min}同${max}之間。
—??? 在Struts 2框架的配置文件中引用OGNL表達式,例如:
ListPhotos.action?albumId=${albumId}
下面代碼實例對OGNL有更深的了解:
Cat.java
packagecom.oumyye.struts2.ognl;public classCat {privateDog friend;publicDog getFriend() {returnfriend;
}public voidsetFriend(Dog friend) {this.friend =friend;
}publicString miaomiao() {return "miaomiao";
}
}
Dog.java
packagecom.oumyye.struts2.ognl;public classDog {privateString name;publicDog() {
}publicDog(String name) {super();this.name =name;
}publicString getName() {returnname;
}public voidsetName(String name) {this.name =name;
}
@OverridepublicString toString() {return "dog: " +name;
}
}
User.java
packagecom.oumyye.struts2.ognl;public classUser {private int age = 8;publicUser() {
}public User(intage) {super();this.age =age;
}public intgetAge() {returnage;
}public void setAge(intage) {this.age =age;
}
@OverridepublicString toString() {return "user" +age;
}
}
OgnlAction.java
packagecom.oumyye.struts2.ognl;importjava.util.ArrayList;importjava.util.HashMap;importjava.util.HashSet;importjava.util.List;importjava.util.Map;importjava.util.Set;importcom.opensymphony.xwork2.ActionSupport;public class OgnlAction extendsActionSupport {privateCat cat;private Map dogMap = new HashMap();private Set dogs = new HashSet();privateString password;privateUser user;privateString username;private List users = new ArrayList();publicOgnlAction() {
users.add(new User(1));
users.add(new User(2));
users.add(new User(3));
dogs.add(new Dog("dog1"));
dogs.add(new Dog("dog2"));
dogs.add(new Dog("dog3"));
dogMap.put("dog100", new Dog("dog100"));
dogMap.put("dog101", new Dog("dog101"));
dogMap.put("dog102", new Dog("dog102"));
}publicString execute() {returnSUCCESS;
}publicCat getCat() {returncat;
}public MapgetDogMap() {returndogMap;
}public SetgetDogs() {returndogs;
}publicString getPassword() {returnpassword;
}publicUser getUser() {returnuser;
}publicString getUsername() {returnusername;
}public ListgetUsers() {returnusers;
}publicString m() {return "hello";
}public voidsetCat(Cat cat) {this.cat =cat;
}public void setDogMap(MapdogMap) {this.dogMap =dogMap;
}public void setDogs(Setdogs) {this.dogs =dogs;
}public voidsetPassword(String password) {this.password =password;
}public voidsetUser(User user) {this.user =user;
}public voidsetUsername(String username) {this.username =username;
}public void setUsers(Listusers) {this.users =users;
}
}
ognl.jsp
OGNL表達式語言學習版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态