package test;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.junit.Test;
import bean.User;
import ognl.Ognl;
import ognl.OgnlContext;
import ognl.OgnlException;
public class Demo {
/*
* 1. OGNL是Object Graphic Navigation Language(对象图导航语言)的缩写
* 所谓对象图,即以任意一个对象为根,通过OGNL可以访问与这个对象关联的其它对象
* 通过它简单一致的表达式语法,可以存取对象的任意属性,调用对象的方法,遍历整个对象的结构图,实现字段类型转化等功能。
* 它使用相同的表达式去存取对象的属性
2. Struts2框架使用OGNL作为默认的表达式语言
* OGNL是一种比EL强大很多倍的语言
* xwork提供 OGNL表达式
* ognl-3.0.5.jar
3. OGNL 提供五大类功能
* 支持对象方法调用
* 支持类静态的方法调用和值访问
* 访问OGNL上下文(OGNL context)和ActionContext
* 支持赋值操作和表达式串联
* 操作集合对象
*/
/**
* 简单的ognl域存取值演示
* 注意在取context域中值得时候getValue方法第一个参数要加上#号
* @throws OgnlException
*/
@Test
public void demo2() throws OgnlException {
OgnlContext context = new OgnlContext();
context.put("arg1", "arg1Text");
//getValue("#arg1", context, context.getRoot());该方法第一个参数需要加#号
Object value = Ognl.getValue("#arg1", context, context.getRoot());
System.out.println(value.toString());
}
/**
* 从root栈中存取数据
* 将对象存入root域中之后可以使用Ognl.getValue方法来直接获得对象的属性
* 第一个参数也不需要加上#号
* @throws OgnlException
*/
@Test
public void demo3() throws OgnlException {
OgnlContext context = new OgnlContext();
User user = new User("alex1", "123456");
context.setRoot(user);
String username = (String) Ognl.getValue("username", context, context.getRoot());
System.out.println(username);
}
/**
* 用arraylist模拟入栈
*/
@Test
public void demo1() {
List<String> list = new ArrayList<String>();
list.add(0,"1");
list.add(0,"2");
list.add(0,"3");
for (int i = 0; i < list.size(); i++) {
System.out.println(i + ":" +list.get(i));
}
}
}