Struts2中jsp页面和Action类的数据交互之OGNL和值栈

2024-06-03 00:48

本文主要是介绍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和值栈的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1025566

相关文章

Linux下利用select实现串口数据读取过程

《Linux下利用select实现串口数据读取过程》文章介绍Linux中使用select、poll或epoll实现串口数据读取,通过I/O多路复用机制在数据到达时触发读取,避免持续轮询,示例代码展示设... 目录示例代码(使用select实现)代码解释总结在 linux 系统里,我们可以借助 select、

通过React实现页面的无限滚动效果

《通过React实现页面的无限滚动效果》今天我们来聊聊无限滚动这个现代Web开发中不可或缺的技术,无论你是刷微博、逛知乎还是看脚本,无限滚动都已经渗透到我们日常的浏览体验中,那么,如何优雅地实现它呢?... 目录1. 早期的解决方案2. 交叉观察者:IntersectionObserver2.1 Inter

C#自动化实现检测并删除PDF文件中的空白页面

《C#自动化实现检测并删除PDF文件中的空白页面》PDF文档在日常工作和生活中扮演着重要的角色,本文将深入探讨如何使用C#编程语言,结合强大的PDF处理库,自动化地检测并删除PDF文件中的空白页面,感... 目录理解PDF空白页的定义与挑战引入Spire.PDF for .NET库核心实现:检测并删除空白页

C#使用iText获取PDF的trailer数据的代码示例

《C#使用iText获取PDF的trailer数据的代码示例》开发程序debug的时候,看到了PDF有个trailer数据,挺有意思,于是考虑用代码把它读出来,那么就用到我们常用的iText框架了,所... 目录引言iText 核心概念C# 代码示例步骤 1: 确保已安装 iText步骤 2: C# 代码程

Pandas处理缺失数据的方式汇总

《Pandas处理缺失数据的方式汇总》许多教程中的数据与现实世界中的数据有很大不同,现实世界中的数据很少是干净且同质的,本文我们将讨论处理缺失数据的一些常规注意事项,了解Pandas如何表示缺失数据,... 目录缺失数据约定的权衡Pandas 中的缺失数据None 作为哨兵值NaN:缺失的数值数据Panda

C++中处理文本数据char与string的终极对比指南

《C++中处理文本数据char与string的终极对比指南》在C++编程中char和string是两种用于处理字符数据的类型,但它们在使用方式和功能上有显著的不同,:本文主要介绍C++中处理文本数... 目录1. 基本定义与本质2. 内存管理3. 操作与功能4. 性能特点5. 使用场景6. 相互转换核心区别

python库pydantic数据验证和设置管理库的用途

《python库pydantic数据验证和设置管理库的用途》pydantic是一个用于数据验证和设置管理的Python库,它主要利用Python类型注解来定义数据模型的结构和验证规则,本文给大家介绍p... 目录主要特点和用途:Field数值验证参数总结pydantic 是一个让你能够 confidentl

JAVA实现亿级千万级数据顺序导出的示例代码

《JAVA实现亿级千万级数据顺序导出的示例代码》本文主要介绍了JAVA实现亿级千万级数据顺序导出的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 前提:主要考虑控制内存占用空间,避免出现同时导出,导致主程序OOM问题。实现思路:A.启用线程池

SpringBoot分段处理List集合多线程批量插入数据方式

《SpringBoot分段处理List集合多线程批量插入数据方式》文章介绍如何处理大数据量List批量插入数据库的优化方案:通过拆分List并分配独立线程处理,结合Spring线程池与异步方法提升效率... 目录项目场景解决方案1.实体类2.Mapper3.spring容器注入线程池bejsan对象4.创建

PHP轻松处理千万行数据的方法详解

《PHP轻松处理千万行数据的方法详解》说到处理大数据集,PHP通常不是第一个想到的语言,但如果你曾经需要处理数百万行数据而不让服务器崩溃或内存耗尽,你就会知道PHP用对了工具有多强大,下面小编就... 目录问题的本质php 中的数据流处理:为什么必不可少生成器:内存高效的迭代方式流量控制:避免系统过载一次性