Struts2 OGNL总结
来源:互联网 发布:软件开发 tr4阶段 编辑:程序博客网 时间:2024/06/14 06:29
之前对OGNL中的上下文环境有点疑惑,在这里总结一下:
OGNLContext对应ActionContext (一直以为是两个不同的Context)
Struts2框架把OGNL Context设置为ActionContext。并且ValueStack作为OGNL的根对象。除value stack之外,Struts2框架还把代表application、session、request这些对象的Map对象也放到ActionContext中去。(这也就是Struts2建议在Action类中不要直接访问Servlet API的原因,他可以通过ActionContext对象来部分代替这些(Servlet API)功能),这里说的够清楚了。
ognl的root,对应ActionContext的ValueStack
ActionContext里除了最关键的ValueStack,常用的还有request,session,application。
ValueStack里一定有Action本身,而且ValueStack有个特殊的性质,就是会把其中包含对象的字段,看做自己的字段,可以直接访问。比如说,Action里有User,User里有name,那么你想访问name,只需要<s:property value="user.name" />就可以。
除了ValueStack里的字段可以直接访问以外,其他的需要加上#操作符;
|--request
|
|--application
|
context map---|--OgnlValueStack(root)
|
|--session
|
|--attr
|
|--parameters
“#”主要有三种用途:
- 访问OGNL上下文和Action上下文,#相当于ActionContext.getContext();下表有几个ActionContext中有用的属性: 名称作用例子parameters包含当前HTTP请求参数的Map#parameters.id[0]作用相当于request.getParameter("id")request包含当前HttpServletRequest的属性(attribute)的Map#request.userName相当于request.getAttribute("userName")session包含当前HttpSession的属性(attribute)的Map#session.userName相当于session.getAttribute("userName")application包含当前应用的ServletContext的属性(attribute)的Map#application.userName相当于application.getAttribute("userName")attr用于按request > session > application顺序访问其属性(attribute)#attr.userName相当于按顺序在以上三个范围(scope)内读取userName属性,直到找到为止
- 用于过滤和投影(projecting)集合,如books.{?#this.price<100};
- 构造Map,如#{'foo1':'bar1', 'foo2':'bar2'}。
这里要说明一下:
OGNL容器中非root的访问要用”#“,并且访问的方式是用Map的键值对方式访问(有键找值)。
而root中属性访问则是直接按照对象名和属性名访问,一般root中的存储为
顺序为:object.propertyName返回propertyValue,如果直接输入propertyName则直接从valueStack的栈顶往下寻找第一个匹配propertyName的值,找到就不继续向下寻找。
- Struts2 OGNL总结
- struts2—OGNL总结
- struts2总结之 OGNL表达式
- Struts2 OGNL valueStack琐碎总结
- struts2之valueStack(OGNL) (总结)
- struts2要点总结 通配符、OGNL、拦截器
- struts2要点总结 通配符、OGNL、拦截器
- OGNL, JSTL, STRUTS2标签用法示例 总结
- Struts2学习总结 ---- OGNL 表达式语言
- 【转载】Struts2学习总结 ---- OGNL 表达式语言
- Struts2使用OGNL遍历各种map总结
- struts2总结之 OGNL表达式
- struts2 ognl
- struts2 OGNL # % $
- struts2 OGNL # % $
- struts2 OGNL
- OGNL struts2
- struts2 OGNL
- 命令行方式下登录SqlPlus,密码含特殊字符
- codeforces_#135_div2_219A
- ImageView 使用网络图片
- 堆和栈的区别
- Android Studio 代码页面保护色配置
- Struts2 OGNL总结
- 编译原理:第五节
- Android 网络通信——xUtils网络框架
- Android, 四种基本布局
- hdu5442 最小最大表示法+kmp
- Serializable序列化与session
- appium结合jenkins进行集成测试(一)
- 执行力如何提高?
- python思想一