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需要添加’#’
- 在jsp页面导入struts2的标签库: