OGNL

OBject-Graph Navigation Language

package ognlpackage;

import java.util.ArrayList;
import java.util.List;

import ognl.Ognl;
import ognl.OgnlContext;
import ognl.OgnlException;

public class OGNLBasic {

	private static Group group = new Group();
	private static List<User>users = new ArrayList<User>();
	private static User user1 = new User();
	private static User user2 = new User();
	private static OgnlContext ognlContext = new OgnlContext();
	private static Object root = new Object();//根对象,只做点位符使用

	public static final String HELLO_WORLD="hello world";

	private static void initData(){
		group.setGroupId(1000L);
		group.setGroupName("OGNL组");

		user1.setUserId(1L);
		user1.setUserName("zs");
		user1.setGroup(group);

		user2.setUserId(2L);
		user2.setUserName("ls");
		user2.setGroup(group);

		users.add(user1);
		users.add(user2);
		group.setUsers(users);//双向关联

		ognlContext.put("group", group);//全部放入到OGNLContext中,其实就是一个map
		ognlContext.put("users", users);
		ognlContext.put("user1", user1);
		ognlContext.put("user2", user2);
	}

	private static void printGroup() throws OgnlException{
		System.out.println("      1.  以group为OGNL对象访问用户组信息       ");
		System.out.println("用户组的ID为:"+Ognl.getValue("groupId", group));
		System.out.println("用户组的名称为:"+Ognl.getValue("groupName", group));
		System.out.println("-----------------------------------------------");
	}


	private static void printUsers() throws OgnlException{

		System.out.println("     2. 以group为OGNL root对象访问用户组中用户的信息     ");
		System.out.println("用户组1为:"+"id="+ Ognl.getValue("users[0].userId", group));
		System.out.println("用户组1为:"+"name="+ Ognl.getValue("users[0].userName", group));
		System.out.println("-----------------------------------------------");
	}

	/**
	 * 切换OGNLContext访问对象
	 * @throws OgnlException
	 */
	private static void switchOGNLContext() throws OgnlException{
		System.out.println("     3. 切换OGNLContext访问对象 需要加  #     ");
		System.out.println("用户组id:" + Ognl.getValue("groupId + ',用户1的ID为 '+ #user1.userId", ognlContext, group));
		//可以看出,无论对象切换到哪个,都可以用    #对象.属性表示
		System.out.println("用户组id:" + Ognl.getValue("#group.groupId + ',用户2的ID为 '+ #user2.userId", ognlContext, user2));
		System.out.println("用户组id:" + Ognl.getValue("#group.groupId + ',用户2的ID为 '+ userId", ognlContext, user2));

		System.out.println("-----------------------------------------------");
	}

	/**
	 * 访问静态变量要在前面加  @
	 * @throws OgnlException
	 */
	private static void printStatic() throws OgnlException{
		System.out.println("     4. 访问静态变量要在前面加  @     ");
		Ognl.getValue("@System@out.println(@ognlpackage.OGNLBasic@HELLO_WORLD)", root);
		System.out.println("-----------------------------------------------");
	}


	private static void printThis() throws OgnlException{
		System.out.println("     5. 支持赋值,this的使用    ");
		//OGNL导航至group.users.size方法时,使用#this来判断size的返回值是否大于0
		System.out.println("用户组是否为空:" + Ognl.getValue("users.size.(#this>0?'否':'是')", group));
		System.out.println("-----------------------------------------------");
	}

	public static void main(String[] args) throws OgnlException{
		initData();
		printGroup();
		printUsers();
		switchOGNLContext();
		printStatic();
		printThis();
	}
}

class Group{
	private Long groupId;
	private String groupName;
	private List<User>users;

	public List<User> getUsers() {
		return users;
	}
	public void setUsers(List<User> users) {
		this.users = users;
	}
	public Long getGroupId() {
		return groupId;
	}
	public void setGroupId(Long groupId) {
		this.groupId = groupId;
	}
	public String getGroupName() {
		return groupName;
	}
	public void setGroupName(String groupName) {
		this.groupName = groupName;
	}

}
class User{
	private Long userId;
	private String userName;
	private Group group;

	public Group getGroup() {
		return group;
	}
	public void setGroup(Group group) {
		this.group = group;
	}
	public Long getUserId() {
		return userId;
	}
	public void setUserId(Long userId) {
		this.userId = userId;
	}
	public String getUserName() {
		return userName;
	}
	public void setUserName(String userName) {
		this.userName = userName;
	}

}

输出结果:

      1.  以group为OGNL对象访问用户组信息       
用户组的ID为:1000
用户组的名称为:OGNL组
-----------------------------------------------
     2. 以group为OGNL root对象访问用户组中用户的信息     
用户组1为:id=1
用户组1为:name=zs
-----------------------------------------------
     3. 切换OGNLContext访问对象 需要加  #     
用户组id:1000,用户1的ID为 1
用户组id:1000,用户2的ID为 2
用户组id:1000,用户2的ID为 2
-----------------------------------------------
     4. 访问静态变量要在前面加  @     
hello world
-----------------------------------------------
     5. 支持赋值,this的使用    
用户组是否为空:否
-----------------------------------------------



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值