package cn.lyjs.ognl; import org.junit.Test; import ognl.Ognl; import ognl.OgnlContext; import ognl.OgnlException; public class OgnlDemo1 { /** * Ognl表达式语言取值,取非根元素必须使用#, * 如果取根元素的值,不需要带#号 * @throws OgnlException */ @Test public void testOgnl() throws OgnlException { //创建一个Ognl上下文对象 OgnlContext context=new OgnlContext(); //放入数据 User user=new User(); user.setId(20); user.setName("Tom"); context.put("user", user); //获取数据 //先构建一个Ognl表达式,在解析表达式 Object ognl=Ognl.parseExpression("#user.id"); Object value=Ognl.getValue(ognl, context, context.getRoot()); System.out.println(value); } @Test public void testOgn2() throws OgnlException { //创建一个Ognl上下文对象 OgnlContext context=new OgnlContext(); //放入数据 User user=new User(); user.setId(20); user.setName("Tom"); context.setRoot(user); //获取数据 //先构建一个Ognl表达式,在解析表达式 Object ognl=Ognl.parseExpression("id"); Object value=Ognl.getValue(ognl, context, context.getRoot()); System.out.println(value); } /** * Ognl对静态方法调用的支持 * @throws OgnlException */ @Test public void testOgnl3() throws OgnlException { //创建一个Ognl上下文对象 OgnlContext context=new OgnlContext(); //Ognl表达式语言,代用类的静态方法 //Object ognl=Ognl.parseExpression("@Math@floor(10.9)"); //由于Math类在开发中比较常用所以也可以这样写 Object ognl=Ognl.parseExpression("@@floor(10.9)"); Object value=Ognl.getValue(ognl, context, context.getRoot()); System.out.println(value); } }
package cn.lyjs.ognl; import static org.junit.Assert.*; import javax.servlet.http.HttpServletRequest; import org.apache.struts2.ServletActionContext; import org.junit.Test; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport; import com.opensymphony.xwork2.util.ValueStack; public class OgnlDemo2 extends ActionSupport{ @Override public String execute() throws Exception { gets(); return SUCCESS; } private void gets() { //获取值栈对象 HttpServletRequest request = ServletActionContext.getRequest(); ValueStack vs2 = (ValueStack) request.getAttribute("struts.valueStack"); //获取值栈对象 ActionContext ac=ActionContext.getContext(); ValueStack valueStack = ac.getValueStack(); } }