Ognl

 

 

 

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();
    }
}

 

posted @ 2016-01-02 16:30  好人难寻  阅读(186)  评论(0编辑  收藏  举报