Ognl表达式

1.概述

1.1.是一种功能强大的表达式, 一般和struts2标签一起使用,用来操作值栈
1.2.不是struts2的一部分,但经常一起使用
1.3.使用时需要导入jar包,struts2有提供
1.4.值栈的概念:
<1> struts2本身提供的一种存储机制,类似于域对象,可以存取值
<2> 一般在action中把数据存放至值栈,在前端页面获取
<3> 每次访问action都会创建action对象,每个action对象中都有且仅有一个值栈对象
<4> 值栈对象有多种获取方式,常用ActionContext类中的方法获取
<5> 内部结构:
root部分:list集合结构
context部分:map集合结构

2.基本操作

2.1 前端页面导入标签库
<%@ taglib uri="/struts-tags" prefix="s" %>

*入门案例:显示字符串长度:


2.2 查看值栈结构和存储值

2.3 从值栈存取数据

(1). 存取字符串/对象
向值栈放入字符串/对象:

public class OGNL_one extends ActionSupport {
    private User user=new User();

    public User getUser() {
        return user;
    }

    public String execute(){
        user.setUaddr("add");
        user.setUname("kin");
        return "success";
    }
}

前端用struts2+ognl表达式获取:



(2).存取list集合
向值栈放入list:

public class OGNL_one extends ActionSupport {

    private List list=new ArrayList();

    public List getList() {
        return list;
    }
    public  String listSet(){
        User user1=new User();
        user1.setUname("甲");
        user1.setUaddr("城东");
        user1.setUtime("noon");
        list.add(user1);
        User user2=new User();
        user2.setUname("乙");
        user2.setUaddr("城西");
        user2.setUtime("dawn");
        list.add(user2);
        return "success";
    }
}

前端获取:









*struts2标签无法识别ognl表达式,直接在struts2表单标签中使用ognl表达式应在前加%注明
例:在struts2标签中用ognl表达式获取request域中的值

HttpServletRequest request=ServletActionContext.getRequest();
request.setAttribute("req","reqValue");

key的名称对应域的名称request


(3).set、push方法
直接使用值栈对象里面的方法步骤:
I.获取值栈对象
II.调用set/push方法

//获取值栈对象
ActionContext context=ActionContext.getContext();
ValueStack stack=context.getValueStack();
//调用set方法
stack.set("test","testvalue");
//调用push方法
stack.push("WOWOWOWOW~");

前端获取:
set方法以名称-值的键值对方式存入值栈
前端根据名称获取值



push方法设置值,没有名称
值栈放数据都存储在top数组里,根据数组获取值



*top原理为栈,元素先进后出
例如先后push数据A、B,前端获取[0].top,[1].top,结果为B,A

你可能感兴趣的:(Ognl表达式)