今天是struts2的重点了,OGNL的讲解了.把这个学习好了,struts2就能掌握好一大半了.嘿嘿,不过得好好努力学习和练习代码了.
1.OGNL的基本概念
OGNL(对象图导航语言,Object Graph Navigation
Language)是一种用于从ValueStack对象与其关联的Context上下文中获取的值的表达式
基本语法:
1)可以用#key的形式访问OGNL
Context对象中的各个key对应的对象,并可以采用点(.)操作符进行多级导航调用对象的属性和方法,例
如,#application、#session.attr1、#key1.sayHello();对于map对象,map.attr不是
map.getAttr()方法,而是表示map.get(“attr1”)。
2)如果要访问根对象的属性或方法,则可以省略#key,直接访问该对象的属性和方法。
struts2修改了OGNL表达式的默认属性访问器,它不是直接访问根对象ValueStack的属性或方法,而是在ValueStack内部的堆栈中
所有对象上逐一查找该属性或方法,搜索顺序是从栈顶对象开始寻找,依次往下,直到找到为止,例如,sayHello()表示调用堆栈中某个对象的
sayHello()方法。
3)如果引用名前面没有#,且valueStack中存储的各个对象没有该属性,则把该名称当作
Context对象中的某个key来检索对应的对象,但这种方式不支持点(.)操作符。
4)#parameter.id[0]”或”#parameter[‘id’][0]”访问名称为id的请求参数。
2.Locale的获取
先从request中得到valueStack,再从 ValueStack获得context,再从context中用[]的方式获取。
支持类静态方法调用和属性访问
表达式的格式为@[类全名(包括包路径)]@[方法名 | 值名],
例如:@java.lang.String@format(‘foo %s’,
‘bar’)或@cn.itcast.Constant@APP_NAME;
session.attribute[“foo”]等效于 session.getAttribute(“foo”)方法。
3.OGNL表示大整数
<s:property
value="%{1111111111111111111111H.bitLength()}"/>
,而在java中则不能直接写
1111111111111111111111这么大的整数。
操作:
<s:property
value=“110H.intValue().(#this<112?#this*2:#this/2)”/>
4.Struts2 特殊功能
[n]表示从原来堆栈中截取一个子堆栈并对这个子堆栈进行操作,子堆栈为原始堆栈的栈顶开始的索引号为n的元素一直到栈底.
例如,[1].age表示从原始堆栈中的索引号为1的对象(即第二个对象)开始查找age属性,以找到的第一个为准。
top表示 ValueStack栈顶的对象,[0].top和top表示同一个对象。
5.集合对象的操作
{}创建List集合
<s:set value=“{1,3,5,7}”
var=“list”/>
创建数组
<s:set value=“new
int[]{1,3,5,7}” var=“array”/>
<s:set value=“new int[4]”
var=“array”/>
#{}创建Map集合对象
各个元素之间用逗号分隔,元素的key和value之间采用冒号分隔
<s:set
value=“#{‘lhm’:96,’zxx’:93,’xpc’:97}”
<s:set
value=“#@java.util.LinkedHashMap@{‘lhm’:96,’zxx’:93,’xpc’:97}”
in与 not in操作符用于判断某个值是否位于某个集合中。
集合伪属性:size/isEmpty/iterator/keys/values /next/hasNext
6.投影
集合中的每个元素去进行运算,各个元素运算的结果组成一个新集合,新集合中的元素个数与原始集合中的元素个数相同。
<s:property
value=“persons.{name}”/>
<s:property
value=“{5,3,2}.{#this*2}”/>
7.过滤
集合中的每个元素去进行布尔运算,运算的结果为 true,则将该元素保存到新集合中去。
?:获得所有符合逻辑的元素。
<s:property value=“{5,3,2}.{?
#this }”/>
^:获得符合逻辑的第一个元素。
<s:property value=“{5,3,2}.{^
#this>3 }”/>
$:获得符合逻辑的最后一个元素。
<s:property value=“{5,3,2}.{$
#this>2 }”/>
8.类型转换
转换成boolean类型
整数0转换为false
值为0的字符转化为false
Null对象转化为false
投影和选择操作符 (e1.{e2} and e1.{?e2})前面的内容会被转换成集合
Map会被转化成其values属性返回的集合
数字会被转换成从0开始到比该数字小1的所有数字的集合。
单个对象被转换成仅仅只含有该对象的集合。
9.在配置文件中使用OGNL
在struts2的各种配置文件中也可以使用OGNL,只需要将OGNL表达式套在${}中,即${ognl表达式}。
相关推荐
80、编程学习资源与x86知识全解析
本文详细介绍了编程学习中多个领域的优秀书籍和博客资源,涵盖逆向工程、C/C++、x86/x86-64架构、ARM、汇编语言、Java、UNIX、密码学等多个方向。同时,深入解析了x86架构的核心知识,包括术语、通用寄存器、FPU寄存器、SIMD寄存器、调试寄存器以及常用指令的使用方法和操作步骤。通过本文,读者可以系统地掌握底层编程知识,并应用于逆向工程、系统开发和性能优化等领域。
传智播客--struts2.x的ActionContext,ValueStack和常用标签介绍
struts2学习一天了.张老师讲的太细太深了.呵呵,课也在网上直播了.听的真的好过瘾啊.果然是名不虚传啊.讲的那么深,对刚刚接触struts2接受起来还真得下点功夫啊.1.ActionContext封装Action所需的环境信息和数据ActionContext提供了各种针对ValueStack关联的Context的便利操作方法:put()方法和get()
YOLOv11【第三章:高阶应用与落地篇·第7节】多任务联合训练(Multi-Task Learning):检测+分割+关键点三头并进!
🏆 本文收录于专栏 《YOLOv11实战:从入门到深度优化》。本专栏围绕 YOLOv11 的改进、训练、部署与工程优化 展开,系统梳理并复现当前主流的 YOLOv11 实战案例与优化方案,内容目前已覆盖 分类、检测、分割、追踪、关键点、OBB 检测 等多个方向。
Struts2(传智播客笔记7)
OGNL表达式语言 OGNL是Object Graphic Navigation Lanaguage(对象图导航语言)的缩写,它是一个开源项目。Struts2框架使用OGNL作为默认的表达式语言。 相对EL表达式,它提供了平时我们需要的一些功能,如: 1、支持对象方法调用 2、支持类静态方法调用和值访问,表达式的格式为 @[类全名(包括包路径)]@[方法名|值名],例如:java.lan
传智播客——OGNL表达式语言
今天黎老师给我们讲OGNL表达式语言,他讲过一遍我们几乎掌握80%,他讲得通俗易懂! 1.OGNL表达式语言 OGNL是Object Graphic Navigation Language(对象图导航语言)的缩写,它是一个开源项目。 Struts 2框架使用OGNL作为默认的表达式语言。 相对EL表达式,它提供了平时我们需要的一些功能,如: 支持对象方法调用,如xxx.sayHel...
传智播客--struts2.x的常量配置,动态方法调用,通配符,拦截器,ValueStack和标签
我的struts1.x学的不错.对struts2.x的学习就很有信心了.不过大家要知道,struts1.x和struts2.x是两回事哦.struts2.x和struts1.x完全没有关系.也不是什么升级版的.struts2.x是从另一个框架演变来的.好了,开始我们今天的总结吧.1.Struts2入门之HelloWorld编写不依赖任何三方包的Action类按照MV
struts2.X心得11--struts2中的国际化
总结: 国际化的使用,有四种方式或常用格式,第一种就是全局的国际化使用,在src路径下配置三个全局的配置文件,比如有中文、英文、和默认的,格式分别是baseName_language_country.properties、baseName.properties;第二种是局部国际化使用,即为某一模块配置一个国际化资源文件,适合开发大型应用时,格式为在改模块的包下,或指定包路径下,一般在action
Struts2个人小结(主要依据传智播客的视频)
为什么80%的码农都做不了架构师?>>> ...
传智播客-struts2(6)-数据校验、数据转换与文件上传
struts2并不仅仅只有前面所写的这点内容,不过本人又不是写书,加这篇已经写了六篇,对得起观众了(咳咳。。如果有的话。。。)~~~另外,要强调的是,struts2的OGNL表达式功能其实无比强大,远不止前面写的那一点点皮毛,开发时如果希望能将struts2的功能运用得得心应手的话,还是要多看文档,多实践的,当然最好的捷径是--来传智播客,这边的授课老师已经把官方文档过了一遍,所以可以省却我们自学
struts2的概述和开发struts2需要的jar文件
一、struts2的概述 Struts2是一个用来开发mvc应用程序的框架,它提供了web应用程序开发过程中的一些常见问题的解决方案: 1】.struts2=struts1+webwork 1和2没有本质的关系 2】.对页面导航活动进行管理。 3】.对来自用户的输入数据进行合法性验证 4】.统一的布局 5】.
Java开源在线考试系统怎么选?从技术选型到落地部署的完整指南
Java开源在线考试系统怎么选?本文从技术选型、核心功能、部署运维、二次开发等维度,梳理了Java开源在线考试系统的选型要点。
大数据 之 Snappy
【代码】大数据 之 Snappy。
Spring WebFlux 适配达梦新方案|dm‑r2dbc:Netty 异步传输的实验性 R2DBC 驱动
dm‑r2dbc 是面向达梦 DM8 的实验性 R2DBC 驱动,混合架构:Netty 异步网络传输层 + JDBC 驱动协议编解码复用。核心思路:不去逆向达梦私有协议二进制报文,直接复用达梦 JDBC 驱动内部已经成熟的编解码逻辑,通过反射替换 JDBC 内部默认阻塞 Socket 传输实现,替换为 Netty NIO 异步通道,实现真正异步非阻塞网络 IO。
Spring AI RAG管道构建与优化
<think>我们只需要根据给定的内容生成摘要(≤150字)。给定内容较长,但核心是Spring AI RAG管道构建与优化,涉及文档加载、分割、嵌入、存储、检索、生成等。摘要应高度概括。 注意用户要求“根据以下内容,生成≤150字的文章摘要”。内容提供了代码等细节,但摘要需抓住要点。 写出摘要,字数≤150。</think>摘要:本文深入讲解Spring AI RAG管道的构建与优化,涵盖文档加载、分割、嵌入、存储、检索到生成的全流程。详细展示了多源文档加载(PDF、网页、JSON)、多种分割策略(按页、
41面向对象(高级)-抽象类
当父类的某些方法,需要声明,但是又不确定如何实现时,可以将其声明为抽象方法,那么这个类就是抽象类。
商超智能运营如何落地?从系统架构到实战避坑的完整技术路径
3. **多端交互展示层**:需覆盖顾客使用的**小程序、APP及H5公众号**,以及员工使用的管理后台。答:在应用层引入**适配器模式**。在项目启动时,应强制要求供应商或自研团队产出**部署文档**(含环境变量清单)和**二次开发文档**(含核心流程时序图),确保后续维护不受限于个人。- **多租户插件**:MyBatis Plus的`TenantLineInnerInterceptor`可实现SQL层面的自动拼接`store_id`条件,防止开发者因SQL编写疏漏导致的数据越权。
Java的AI生成式编程工具落地流程
针对Oracle数据库操作场景,让AI自动生成MyBatis-plus的CRUD代码,同时适配Oracle特有的JSON_TABLE、XMLTABLE等高级函数语法,避免手写SQL的语法错误。利用AI的全链路生成能力,快速搭建AI问答机器人、智能风控等Java AI应用原型,整合Stanford CoreNLP、Elasticsearch等组件,大幅缩短新业务的落地周期。调试排障阶段:把报错堆栈信息直接粘贴给AI,它会结合本地代码上下文定位根因,同时给出可直接运行的修复代码片段,大幅降低Bug排查耗时。
电商推返模式的技术架构与系统落地实践
成功的电商推返模式系统,本质是。
大模型API并发限流解析:中科热备多Key轮换工程方案
灾备与数据保护技术实战:CDP持续保护、数据库备份、异地容灾架构等核心技术深度解析。
工控机之static工具类
static工具类是无状态工具集合:删除构造函数禁止实例化;语法允许一个类同时拥有static函数和普通成员变量,但那样它就不是无状态工具类,而是有状态实例类。4. 不要普通成员变量:普通成员变量属于对象实例;单独创建一个管理器类,允许实例化,状态作为普通成员变量;• 工具类(静态类):无状态,ProtocolUtil::xxx();协议转换、校验、格式化;// ✅允许:static成员函数,纯函数,输出仅依赖入参,无副作用。纯工具类:无状态工具集合,只提供公共算法函数,不创建对象、不保存运行时状态。
RocketMQ订单事务消息实战教学
用户下单要同时扣库存、扣余额、加积分,拆成 MQ 异步履约后,原子性、重复投递、部分成功三大难题怎么破?本文用一个真实可跑的下单案例,讲透 RocketMQ 事务消息(half 消息/本地事务/回查)、三层幂等防线(Redis SETNX + DB 唯一索引 + ▎ 条件更新)、业务失败与消费失败的区分处理、按状态补偿的 Saga 关单逆向流程,以及死信工单 + 人工重放的完整闭环。全量代码含 import、pom 依赖、建表 SQL,附三条可演示链路、生产落地清单与面试题速答,跟着做即可复现。
BM2000 (Bridge Master 2000) 完整版-510副牌,世界上最好坐庄训练软件
世界上最好的桥牌坐庄软件:BM2000(Bridge Master 2000)(桥牌大师2000完整版),共510副牌
keil arm compiler v5.06 build 960
使用方法:1. 解压文件。2. 安装v5_compiler_b960\Installer\setup.exe。3. 安装路径选择 keil/ARM/ARMCC,若无ARMCC文件夹,请自行创建。4. 打开keil, 1. 进入 `Manage Project Items` 界面(即品字按钮), 2. 选择 `Folders/Extensions` 菜单, 3. 点击 `Use ARM Compiler` 后的`...`按钮 4. 点击 `Add another ARM Compiler Version to List...` 5. 选择 `Keil/ARM/ARMCC` 文件夹5. 保存退出6. 编译器选择 v5.06 update 7 build 960进行编译查看是否正常
206




被折叠的 条评论
为什么被折叠?



