黑马程序员---struts2学习笔记之八(ognl原理及使用)
2015-08-08 15:15
1086 查看
-----------android培训、java培训、java学习型技术博客、期待与您交流!------------
ognl表达示语言
Ognl:是Object-GraphNavigation Language的缩写,全称为对象图导航语言,是一种功能强大的表达式语言,它通过简单一致的语法,可以任意存取对象的属性或者调用对象的方法,能够遍历整个对象的结构图,实现对象属性类型的转换等功能.1.优势
*支持对象方法调用,
*支付类的静态方法调用,
*支付赋值操作和表达式串联
*访问OGNL上下文
*操作集合对象
2.在研究OGNL时需要先对ValueStscd进行研究
ValueStscd(值栈):贯穿带个action(action类,多例的)的生命周期,每个action都拥有一个ValueStscd,相当于一个数据的中转站,在其中保存当前action对象和其它相关对象。
ValueStscd是一个接口,程序在实际运行中由框架负责根据底层的实现进行实例化(OgnlValueStscd),存在放Request中。因此可以通过rep.getAttribute("struts.valueStack")得到ValueStscd对象。
ServletActionContext.getContext().getValueStack()是ValueStscd对象的第二种方法。
ValueStscd对象中有再从个逻辑部分:
ObjectStack:Struts把动作和相关的对象压入ObjectStack中的List;
ContexMap:Struts把各种各样的映射关系压入ContexMap中。
3.Ognl使用方法
访问Ognl上下文和action上下文,#相当于ActionContext.getContext();
3.1通过#+域对象+.+Key或#+域对象+[‘Key’]的表达式就可以获取得到后台存放进来相应域对象的值,例如:
后台代码:分别在Request,session及servletContext域对象中存放key值为username的数据:
***************************************************************
HttpServletRequestrep = ServletActionContext.getRequest();
rep.setAttribute("username",
"name_Request");
Map<String,Object> sessionMap = ServletActionContext.getContext()
.getSession();
sessionMap.put("username",
"name_sessionMap");
ServletContextservletContext = ServletActionContext
.getServletContext();
servletContext.setAttribute("username",
"name_servletContext");
***************************************************************
Jsp页面上代码:通过OGNL表达式将后台存放的数据获取
***************************************************************
方式一:<s:property
value="#request.username"/><br>
方式二:<s:property
value="#session[‘username’]/><br>
方式一:<s:property
value="#application.username"/><br>
***************************************************************
3.2获得请求中带的参数,例如:
***************************************************************
……/ognl/OgnlAction_test?userid=10086(链接)
<s:property
value="#parameters.userid"/>(获得传过来的参数值)
***************************************************************
3.3从对象栈中获取对象的属性:
后台代码:
***************************************************************
valueStack.push(newPerson("bbb","wm"));//将对象压入栈顶
valueStack.getRoot().set(0,new Person("aaa",
"m"));//将对象放到对象栈的第X个位置,X为0时与压栈一样
valueStack.getRoot().add(newPerson("cccc", "????"));//将对象添加到对象栈后面
***************************************************************
前台代码
***************************************************************
<s:property
value="name"
/>
<s:property
value="sex"
/>
<s:property
value="age"
/>
前台代码直接通过对象的发生名取舍,框架会从对象栈的上到下依次查找,查到就停止。
***************************************************************
3.4操作map集合
构造Map:<s:radiolist="#{'01':'男','02':'女'}"></s:radio>
3.5%号的用法:在标签的属性值被理解为字符型时,告诉执行环境%{}里的是OGNL表达式。
***************************************************************
<s:property
value="#request.username"
/>
可以写成:
<s:property
value="%{#request.username}"
/>
***************************************************************
%{}是万能用法,无论里面的表达式是不是ognl表达式,都会强制理解为ognl表达式,%{}的两种用法:
A.用于在国际化资源文件中,引用OGNL表达式:(非重点,不详细说明);
B.在Struts 2配置文件中,引用OGNL表达式:
后台配置:
***************************************************************
<action
name="OgnlAction_test"
class="com.struts2.ognl.OgnlAction"
method="test">
<result
name="ogln_test_ok">/ognl/OgnlAction.jsp?msg=%{#request.username}</result>
<result
name="input">/error.jsp</result>
</action>
***************************************************************
前台可以按获取参数的方式拿到msg的值。
----------------------------------------------------------2015年8月7日笔记----------------------------------------------------------------------
相关文章推荐
- springmvc 集合类型绑定
- JAVA 注解的几大作用及使用方法详解
- 黑马程序员---struts2学习笔记之七(表单验证)
- Java泛型总结(1)
- JAVA 阻塞队列
- 黑马程序员---struts2学习笔记之六(自定义拦截器)
- 常用的Eclipse快捷键
- [JavaSecurity] - AES Encryption
- springmvc 全局异常解决方案
- ubuntu14.01.1 搭建eclipse Hadoop开发环境
- String format and Math类
- 如何在其他servlet中获取用户登录id
- Java InitializingBean
- Java内部类
- Java垃圾回收机制详解
- 安装eclipse插件,重启后报错,恢复启动方法备忘
- java中继承和多态区别.
- JAVA编程思想学习笔记(二)---方法重载
- String 相关操作
- java注解学习笔记