本文主要是介绍Struts2中jsp页面和Action类的数据交互之OGNL和值栈,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
OGNL(Object Graphic Navigation Languag的缩写,它是一个开源项目。 Struts2框架使用OGNL作为默认的表达式语言。
在struts2项目中导入ognl.jar包来实现支持ognl表达式。jsp页面ognl结合Struts2标签使用
ognl表达式和EL表达式:
EL表达式: 获取域对象的数据。 不能存放数据,不能调用方法
Ognl表达式: 获取域对象的数据。 可以存放数据,可以调用方法。
OGNL的优势:
1.支持对象方法调用,如xxx.doSomeSpecial();
2.支持类静态的方法调用和值访问,表达式的格式:@[类全名(包括包路径)]@[方法名 | 值名],例如:@java.lang.String@format('foo %s', 'bar')或@tutorial.MyConstant@APP_NAME;
3.支持赋值操作和表达式串联,如price=100, discount=0.8,calculatePrice(),这个表达式会返回80;
4.访问OGNL上下文(OGNL context)和ActionContext;
5.操作集合对象。Ognl表达式核心OgnlContext对象
从OgnlContext对象取出根对象数据(ognlContext .setRoot(object)保存的数据),不需要#号
从OgnlContext对象取出非根对象数据(ognlContext .put(key, object)保存的数据),需要#号struts2的值栈(ValueStack)对象(对OgnContext对象的封装)
ValueStack接口,的实现类OgnlValueStack
ValueStack的数据存储结构:分为List栈(根栈)和Map栈(非根栈)1)List栈主要存储Action对象和Provider代理对象,自定义对象 2)Map栈主要存放各个域存放的数据和用户的参数信息域对象的List中的取值语法:域对象.对象变量名.对象变量名...,域对象可以省略域对象的Map中的取值语法:#域对象.map的key,域对象可以省略
jsp页面获取值栈(ValueStack)List中和Map中的数据数据:
1. <%@ taglib uri="/struts-tags" prefix="s"%> //申明使用Struts标签 并且以s为前缀使用
2.<s:property value="user.name"/> - <s:property value="user.age"/> //取出valueStack 中的List保存的数据
3.<s:property value="#request.request_data"/> //根据map的key取出request域中map储存的数据
4. <s:property value="#request_data"/><br/> //从request域的map中取数据可以省略request
5.<s:property value="#session.session_data"/> //根据map的key取出session域中map储存的数据
6.<s:property value="#application.application_data"/> //根据map的key取出application域中map储存的数据
7.<s:property value="#attr.session_data"/> // #attr.key 从request域,session域,application域的map中依次一查找
8.<s:property value="#parameters.name"/> //获取客户端传过来的name参数的值迭代域对象中map储存的List
<s:iterator value="#request.userList" var="user"><s:property value="#user.name"/>
</s:iterator>迭代域对象中map储存的map
<s:iterator value="#request.userMap" var="entry"><s:property value="#entry.key"/><s:property value="#entry.value.name"/>
</s:iterator>
在action中的成员变量 如果提供了该成员变量的getter方法,该成员变量在获取时会自动被加入到valueStack中
使用s:property 获取ValueStack中的数据。 所有以变量名+点的方式获取数据,要在在action和对象中提供相应的get方法
这篇关于Struts2中jsp页面和Action类的数据交互之OGNL和值栈的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!