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方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值