Struts2_Object-Graph Navigation Language(OGNL)

package org.com.test.test;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.com.test.model.Department;
import org.com.test.model.Role;
import org.com.test.model.User;
import org.junit.Test;

import ognl.Ognl;
import ognl.OgnlException;

public class TestOgnl {


	@Test
	public void ognl01(){
		try {
			User u = new User(1, "libai", "李白");
			u.setDep(new Department("研发部"));
			/**
			 * 根目录(u)下找username
			 */
			System.out.println(Ognl.getValue("username", u));
			/**
			 * 根目录(u)下找dep.name
			 */
			System.out.println(Ognl.getValue("dep.name", u));
		} catch (OgnlException e) {
			e.printStackTrace();
		}
	}
	
	
	@Test
	public void ognl02(){
		try {
			Map<String, Object> ctx = new HashMap<String,Object>();
			User u = new User(1, "libai", "李白");
			u.setDep(new Department("研发部"));
			Role r = new Role(2, "管理员");
			ctx.put("user", u);ctx.put("role", r);
			/**
			 * 根目录下(u)找username
			 */
			System.out.println(Ognl.getValue("username", ctx, u));
			/**
			 * 没有#号报错:org.com.test.model.User.role	(根目录下找role.name)
			 */
			//System.out.println(Ognl.getValue("role.name", ctx, u));
			/**
			 * 加#号;Map context 中找role.name
			 */
			System.out.println(Ognl.getValue("#role.name", ctx,u));
			/**
			 * 目前root(根目录是ctx),所以可以取得到
			 */
			System.out.println(Ognl.getValue("role.name", ctx, ctx));
			/**
			 * Ognl其实就是一个大的Context,根的key就是root,所以可以根据#root.xx来取值
			 * 这里可以理解为u就是root;
			 */
			System.out.println(Ognl.getValue("#root.nickname", ctx, u));
			System.out.println(Ognl.getValue("#root.user.dep.name", ctx, ctx));
			
		} catch (OgnlException e) {
			e.printStackTrace();
		}
	}
	
	
	@Test
	public void ognl03(){
		try {
			List<User> users = new ArrayList<User>();
			users.add(new User(1, "zs", "张三"));
			users.add(new User(2, "ls", "李四"));
			users.add(new User(3, "ww", "王五"));
			users.add(new User(4, "zl", "周六"));
			/**
			 * 如果是List中的元素,需要用root[index]来取值
			 */
			System.out.println(Ognl.getValue("#root[1].nickname", users));
		} catch (OgnlException e) {
			e.printStackTrace();
		}
	}
	
	
	@Test
	public void ognl04(){
		try {
			List<User> users = new ArrayList<User>();
			users.add(new User(1, "zs", "张三"));
			users.add(new User(2, "ls", "李四"));
			users.add(new User(3, "ww", "王五"));
			users.add(new User(4, "zl", "周六"));
			/**
			 * 访问User中的方法。
			 */
			System.out.println(Ognl.getValue("#root[0].sum(1,2)", users));
			System.out.println(Ognl.getValue("#root[1].hello('+world')", users));
			/**
			 * 访问List的方法。
			 */
			System.out.println(Ognl.getValue("get(0).nickname", users));
			/**
			 * 一个空的User也是可以使用方法的
			 */
			User u = new User();
			System.out.println(Ognl.getValue("hello('+world')", u));
		} catch (OgnlException e) {
			e.printStackTrace();
		}
	}
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值