Struts2中Ognl表达式的使用

package com.wen.test;

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

import org.junit.Test;

import ognl.Ognl;
import ognl.OgnlException;

import com.wen.model.Department;
import com.wen.model.Role;
import com.wen.model.User;

/**
 * 测试Ognl的四种方式的使用
 * 
 * @author John_wen
 * @since 2015-1-9
 */
public class TestOgnl {

	/**
	 * 第一种使用方式;这种是简单使用;Ognl.getValue();第二个参数是根,这样直接可以去根的属性
	 * 
	 * @throws OgnlException
	 */
	@Test
	public void Test01() throws OgnlException {

		User user = new User();
		user.setUserName("hello");
		user.setNickName("你好");
		// 先不设置部门
		System.out.println(Ognl.getValue("userName", user));
		Department dept = new Department();
		dept.setDeptName("人事部");
		user.setDept(dept);
		// 设置部门
		System.out.println(Ognl.getValue("dept.deptName", user));
	}

	/**
	 * 第二种使用方式;需求去Map中的值;
	 * 
	 * @throws OgnlException
	 */
	@Test
	public void Test02() throws OgnlException {

		Map<String, Object> ctx = new HashMap<String, Object>();
		User user = new User();
		user.setUserName("hello");
		user.setNickName("你好");
		Department dept = new Department();
		dept.setDeptName("开发部");
		Role role = new Role();
		role.setName("超级管理员");
		ctx.put("u", user);
		ctx.put("r", role);

		// 输出用户名--这种情况和test01类似;根依然是user;
		// System.out.println(Ognl.getValue("userName", ctx,user));
		// 输出用户名:--在map中找
		System.out.println(Ognl.getValue("#u.userName", ctx, user));
		System.out.println(Ognl.getValue("#r.name", ctx, user));

		// root相当于根
		System.out.println(Ognl.getValue("#root.userName", ctx, user));
	}

	/**
	 * 第三种方式;如果根是list;怎么访问;
	 * 
	 * @throws OgnlException
	 */
	@Test
	public void Test03() throws OgnlException {

		List<User> users = new ArrayList<User>();
		User u1 = new User();
		u1.setUserName("hello");
		u1.setNickName("你好");
		User u2 = new User();
		u2.setUserName("world");
		u2.setNickName("世界");
		users.add(u1);
		users.add(u2);
		// 根是users
		// 总结:如果是list为根,取值则为#root[index].xxx方式
		System.out.println(Ognl.getValue("#root[0].userName", users));
	}

	/**
	 * 取对象中的方法
	 * 
	 * @throws OgnlException
	 */
	@Test
	public void Test04() throws OgnlException {

		List<User> users = new ArrayList<User>();
		User u1 = new User();
		u1.setUserName("hello");
		u1.setNickName("你好");
		User u2 = new User();
		u2.setUserName("world");
		u2.setNickName("世界");
		users.add(u1);
		users.add(u2);
		// 根是users
		// 总结:get();其实是ArrayList中的方法,得到index对应的对象
		System.out.println(Ognl.getValue("get(1).userName", users));
	}

}

你可能感兴趣的:(Struts2中Ognl表达式的使用)