java ognl使用_java框架篇---struts之OGNL详解

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;

public static void setValue( Object tree, Map context, Object root, Object value ) throws OgnlException

1.OGNL表达式的计算是围绕OGNL上下文进行的。

OGNL上下文实际上就是一个Map对象,由ognl.OgnlContext类表示。它里面可以存放很多个JavaBean对象。它有一个上下文根对象。

上下文中的根对象可以直接使用名来访问或直接使用它的属性名访问它的属性值。否则要加前缀“#key”。

2.Struts2的标签库都是使用OGNL表达式来访问ActionContext中的对象数据的。如:。

3.Struts2将ActionContext设置为OGNL上下文,并将值栈作为OGNL的根对象放置到ActionContext中。

4.值栈(ValueStack) :

可以在值栈中放入、删除、查询对象。访问值栈中的对象不用“#”。

Struts2总是把当前Action实例放置在栈顶。所以在OGNL中引用Action中的属性也可以省略“#”。

5.调用ActionContext的put(key,value)放入的数据,需要使用#访问。

OGNL中重要的3个符号:#、%、$:

“#”主要有三种用途:

访问OGNL上下文和Action上下文,#相当于ActionContext.getContext();下表有几个ActionContext中有用的属性:

名称

作用

例子

parameters

包含当前HTTP

请求参数的Map

#parameters.id[0]

作用相当于

request.getParameter("id")

request

包含当前

HttpServletRequest

的属性

(attribute)的Map

#request.userName相当于

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表达式语言学习
  1. 访问值栈中的action的普通属性: username =
  2. 访问值栈中对象的普通属性(get set方法): | | | wrong: --%>
  3. 访问值栈中对象的普通属性(get set方法):
  4. 访问值栈中对象的普通方法:
  5. 访问值栈中对象的普通方法:
  6. 访问值栈中action的普通方法:
  7. 访问静态方法:
  8. 访问静态属性:
  9. 访问Math类的静态方法:
  10. 访问普通类的构造方法:
  11. 访问List:
  12. 访问List中某个元素:
  13. 访问List中元素某个属性的集合:
  14. 访问List中元素某个属性的集合中的特定值: |
  15. 访问Set:
  16. 访问Set中某个元素:
  17. 访问Map:
  18. 访问Map中某个元素: | |
  19. 访问Map中所有的key:
  20. 访问Map中所有的value:
  21. 访问容器的大小: |
  22. 投影(过滤):
  23. 投影:1}.{age}"/>
  24. 投影:1}.{age}"/>
  25. 投影:1}.{age} == null"/>
  26. []:
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值