OGNL表达式简介

OGNL表达式
  • 表达式

    • el表达式
    • 正则表达式
    • ognl表达式
    • 使用简洁的表达式完成比较复杂的功能
  • Object Graph Navigation Library

    • 对象图形导航语言
    • 优点:
      • 能够访问对象的普通方法
      • 能够访问类的静态属性和静态方法
      • 强大的操作集合类对象的能力
      • 支持赋值操作和表达式串联
      • 访问OGNL上下文和ActionContext
  • 直接使用OGNL

//原则:数据分为两类---root和context
//常用的数据一般作为root
//表达式:root数据直接获取,context数据加'#'获取
Map<String, Object> map = new HashMap<String, Object> ();
map.put("name", "char");
map.put("age", 20);

User user = new User();
user.setName("eric");

Object obj1 = Ognl.getValue("name", map, user); // user为root
Object obj2 = Ognl.getValue("#name", map, user); // map不为root,添加'#'来获取

System.out.println(obj1); //输出:eric
System.out.println(obj2); //输出:char
  • struts2中使用OGNL表达式
    • 通过struts2的标签来取值
    • ActionContext作为context
    • ValueStack作为root
    • 注意: 使用struts2的标签,一定要通过struts2的过滤器来启用。如果web.xml配置中url-pattern为*.action不能直接访问jsp,需要通过action跳转
    • 使用:
      • 在jsp页面导入struts2的标签库: <%@ taglib prefix="s" uri="/struts-tags" %>
      • 获取ActionContext中的session对象的attribute:
        username:<s:property value="#session.user"/>
        • 要添加’#’, 先获取session对象,再取出user的值
      • 获取ValueStack中的Action的属性:
        username:<s:property value="name"/>
        • 较为特殊,可以不用添加Action名,直接获取属性
      • 总结: 使用OGNL表达式访问Action属性是可以直接使用属性名称访问,访问ActionContext需要添加’#’

猜你喜欢

转载自blog.csdn.net/weixin_40683252/article/details/81050667
今日推荐