- 1
- 0
- 约6.91千字
- 约 16页
- 2017-05-12 发布于河南
- 举报
struts2_OGNL与值栈(ValueStack)
Struts2___OGNL与值栈(ValueStack)
OGNL Object-Graph Navigation Language
一种功能强大的表达式语言,
通过表达式语法,可以存取对象的任意属性,调用对象的方法,
遍历整个对象的结构图,实现字段类型转化等功能
OgnlContext(Ognl上下文)来存放对象,
OgnlContext是一个Map
访问根对象 不需要#
其他对象需要用 #指定keypublic static void main(String[] args) throws OgnlException {
Employee employee = new Employee();
employee.setName(员工A);
employee.setAddress(new Address(china,常德,后街));
Manager manager = new Manager();
manager.setName(经理A);
// 创建OGNL上下文 OgnlContext是一个Map
OgnlContext context = new OgnlContext();
// 将employee对象放到OGNL上下文中
context.put(employee, employee);
// 将manager对象放到OGNL上下文中
context.put(manager, manager);
// 将employee对象设置为OGNL上下文的根对象
context.setRoot(employee);
// 表达式name,将执行employee.getName(),
//因为employee对象是根对象
Object obj=Ognl.parseExpression(name);
System.out.println(根对象的name属性是:
+ Ognl.getValue(obj, context,context.getRoot()));
System.out.println(根对象的name属性是:
+ Ognl.getValue(name,context.getRoot()));
System.out.println(根对象的address属性的city是:
+ Ognl.getValue(address.city,context.getRoot()));
// 表达式#manager.name,将执行manager.getName(),
// 如果你访问的不是OGNL上下文中的根对象,那么必须在前面加上一个名称空间,例如#manager
obj=Ognl.parseExpression(#manager.name);
System.out.println(manager对象的name属性是:
+ Ognl.getValue(obj, context,context.getRoot()));}
OGNL对象结构Struts2使用OGNL
OGNL表达式是Struts2默认的表达式语言
com.opensymphony.xwork2.ActionContext
com.opensymphony.xwork2.util.ValueStack接口
com.opensymphony.xwork2.util.OgnlValueStack 实现类
Struts2收到请求后,
创建ActionContext,保存在ThreadLocal中,
将OGNL上下文设置为ActionContext,并将ValueStack(值栈)作为根对象
Action实例放到的顶ValueStack不需要#(也可以通过EL访问)
访问其他对象(request,session) 则需要加#
OGNL表达式使用示例:(参见ch4)
访问简单属性:
标签访问:s:property value=simpleAttr /
EL访问:${requestScope.simpleAttr}标签访问:s:property value=employee.name / EL访问:${requestScope.employee.name}标签访问:s:property value=persons[0].name/ EL访问:${requestSc
原创力文档

文档评论(0)