Struts2学习笔记-OGNL

从Struts2出来就开始关注,但一直没有全面的去学习和研究过,最近 计划把Struts2的官方

文档好好的看一遍,并会在这里将学习的内容和 遇见的问题进行发布,欢迎大家来指导和讨

论(由于本人英文水平有限,有很多翻译不正确的地方希望大家进行指正,第一次发表这种

学习笔记,也希望得到大家的鼓励 )

好了,废话少说,直接入题...

 

XWork 提供了通过 OGNL 对 ValueStack 操作的支持,标准 OGNL 要求只对一个 root 操作, XWork 的 ValueStack 概念要求支持多个 roots 操作。

1)标准 OGNL 使用举例:

假设在 OgnlContext map 中有两个对象: ”foo”->foo and “bar”->bar 并且 foo 对象被配置为单一的 root 对象,下边的例子解释了 OGNL 处理的三种情形:

#foo.blah // returns foo.getBlah()

#bar.blah // returns bar.getBlah()

blah      // returns foo.getBlah() because foo is the root

以上说明,OGNL 允许在context 中有多个对象,但是如果你要访问的对象不是root 的话,必须在要访问的对象前边加上一个类似@bar 的命名空间。

2) XWork 有一个专门的 OGNL PropertyAccessor, 该属性访问器将从上到下自动查找整个 stack ,直到找到你要找的属性对应的对象。

For example: 假设 stack 中包含有两个对象: Animal and Person ,这两个对象都有“ name ”属性, Animal 有一个“ species ”属性, Person 有一个“ salary ”属性, Animal 在 stack 的顶部, Person 在 Animal 的下边,下边的代码片断帮助我们理解其原理:

species    // call to animal.getSpecies()

salary     // call to person.getSalary()

name       // call to animal.getName() because animal is on the top

上面的代码片断中返回的是 animal 的 name, 通常这是我们想得到的效果,但是有时我们想得到下级对象的同样的属性,针对这种情况, XWork 在 ValueStack 中添加了索引的支持,因此,可使用以下代码片断分别得到 Animal 和 Person 对象的 name 属性:

[0].name   // call to animal.getName()

[1].name   // call to person.getName()

With expression like [0] ... [3] etc. WebWork will cut the stack and still returned back a CompoundRoot object. To get the top of that particular stack cut, use 0 .top (水平有限,为免误人子弟,在此直接引用原文由大家自己领会)

ognl expression

description

[0].top

would get the top of the stack cut starting from element 0 in the stack (similar to top in this case)

[1].top

would get the top of the stack cut starting from element 1 in the stack

3)访问静态属性

OGNL 支持静态属性和静态方法的访问,具体代码片断举例如下:

@some.package.ClassName@FOO_PROPERTY


@some.package.ClassName@someMethod()


当然, XWork 允许使用 ”vs”prefix 避免指定完整的包名访问 Action 类中的静态方法和静态属性,如:

@vs@FOO_PROPERTY

@vs@someMethod()

 

@vs1@FOO_PROPERTY

@vs1@someMethod()

 

@vs2@BAR_PROPERTY

@vs2@someOtherMethod()

“vs ”代表“value stack ”.

The important thing to note here is that if the class name you specify is just "vs", the class for the object on the top of the stack is used. If you specify a number after the "vs" string, an object's class deeper in the stack is used instead. (大家可对照上面的举例来自行理解该段说明)

4) Struts2 指定的对象

Struts2 将 request parameters and request, session, and application attributes 都存放在 OGNL stack 里面,可通过如下方式访问它们:

name

value

#parameters['foo'] or #parameters.foo

request parameter ['foo'] (request.getParameter())

#request['foo'] or #request.foo

request attribute ['foo'] (request.getAttribute())

#session['foo'] or #session.foo

session attribute 'foo'

#application['foo'] or #application.foo

ServletContext attributes 'foo'

#attr['foo'] or #attr.foo

Access to PageContext if available, otherwise searches request/session/application respectively

 

FAQ:

1)在 jsp 2.1 中, # 至今被用作 JSP EL ,在这种情况下就会引起和在应用中使用 OGNL 的 # 操作产生冲突的问题,对于这种情况,可通过在 web.xml 配置文件中添加以下配置片断在 JSP 2.1 容器中禁用 JSP EL :

<jsp-config>

    <jsp-property-group>

      <url-pattern>*.jsp</url-pattern>

      <el-ignored> true </el-ignored>

</jsp-property-group>

</jsp-config>

 

 

第4-4课:状态压缩与动态规划 什么是状态压缩 动态规划问题中重要的一环就是确定状态的定义,在大多数情况下,状态中所包含的信息并不多,比如线性规划问题的状态一般表示为 d[i,j](i 表示状态的位置,j 表示状态的阶段),算法实现时可用二维数组保存计算过程中的状态。但是也有一些问题,它的状态中包含的信息很多,比如它的状态可能是一个集合中各个元素的情况,或者是像铺瓷砖问题这样,是某一行的覆盖状态。如果沿用简单的状态表示方法,则可... 阅读详情

相关推荐

STM32H7 Flash擦除后数据读取异常的缓存问题解析

本文深入分析了STM32H7系列芯片在Flash擦除后数据读取异常的缓存问题,揭示了由于数据缓存(D-Cache)和指令缓存(I-Cache)导致的数据一致性问题。通过详细的解决方案,包括手动维护缓存一致性和操作期间禁用缓存,帮助开发者有效解决这一常见但棘手的嵌入式开发难题。

weixin_29158413的博客 392

Struts 2学习笔记:OGNL

OGNL OGNL全称:Object-Graph Navigation Language(对象 图 导航 语言) 工作在视图层,用来取代页面中的Java脚本简化数据的访问操作 与JSP2.0中内置的EL相比它们同属于表达式语言: 用于进行数据访问,但是OGNL的功能更为强大. 提供了很多日所不具备的功能,如强大的类型转换功能, 访问方法, 操作集合对象等… OGNL是一 种强大的技术,被集成在Struts2框架中用来帮助实现数据的传输和类型转换 OGNL是基于字符串的HTTP输入/输出和基于Java 对象

慈様 460

模拟量传输4-20ma电流

大家可能会非常熟悉RS232,RS485,CAN等工业上常用的总线,他们都是传输数字信号的方式。那么,我们用什么方式来传输模拟信号呢?工业上普遍需要测量各类非电物理量,例如温度、压力、速度、角度等,这些都需要转换成模拟量电信号才能传输到几百米外的控制室或显示设备上。工业上最广泛采用的是用4~20mA电流来传输模拟量。 采用电流信号的原因是不容易受干扰,因为工业现场的噪声电压的幅度可能达到数V,但是噪声的功率很弱,所以噪声电流通常小于nA级别,因此给4-20mA传输带来的误差非常小;电流源内阻趋于无穷.

tangdongming的博客 1万+

Struts2学习笔记(十) OGNL

OGNL介绍 OGNL是Object-Graph Navigation Language的缩写,它是一种功能强大的表达式语言(Expression Language,简称为EL),通过它简单一致的表达式语法,可以存取对象的任意属性,调用对象的方法,遍历整个对象的结构图,实现字段类型转化等功能。它使用相同的表达式去存取对象的属性。 OGNL三要素 (1).expression 求值表达式——首

心静欣 4024

Camera ITS测试

一、手机端设置: 将 CtsVerifier.apk 安装到设备上, 连接上linux主机。 二、主机端设置: 基础:CTS测试运行环境 然后,主机安装python2.7,及numpy/scipy/matplotlib/opencv 栈和 python 成像库。按照下面的命令依次安装: sudo apt­-get install python-­numpy sudo apt-­g...

wangubuntu的专栏 7783

从建模到调参:基于Simulink的两轮差速机器人轨迹跟踪PID控制全流程解析

本文详细解析了基于Simulink的两轮差速机器人轨迹跟踪PID控制全流程,涵盖运动学建模、仿真环境搭建、PID控制器设计与实现等关键环节。通过Simulink仿真和可视化调试技巧,帮助开发者掌握移动机器人运动控制的核心技术,提升轨迹跟踪精度与性能优化能力。

weixin_28717683的博客 240

Struts2学习笔记__OGNL

"#"声明OGNL表达式 作用:访问OGNL上下文和Action上下文 − 主要有3种用途: 能够访问OGNL上下文与ActionContext资源,相当于ActionContext.getContext()  parameters:包含当前HTTP请求参数的Map,#parameters.id[0]作用相当于request.getParameter(“id”) 例如:http://loc...

茨时代べ 的博客 212

QGIS基于快鸟(QuickBird)影像统计小麦种植面积

​01数据情况 本次选用某地4月份快鸟(QuickBird)影像为例,使用QGIS演示提取小麦播种情况,并按照200米*200米分区计算种植面积的过程。 注:本文对应的操作视频作为今天第二篇推送同时发布,习惯看视频的朋友可以点击观看。 附数据压缩包: 链接:https://pan.baidu.com/s/1JVUS8uAOR61RxC1n9Or9_w 提取码:qgis 含快鸟影像QB_subset.tif和200*200米分区矢量图层200Mgrid.shp。 ...

QGISClass的博客 1978

【Struts2学习笔记(13)】Struts2中OGNL详解

(1)OGNL表达式语言 OGNL是Object Graphic Navigation Language(对象图导航语言)的缩写,它是一个开源项目。 Struts 2框架使用OGNL作为默认的表达式语言。 相对EL表达式,它提供了平时我们需要的一些功能,如: 支持对象方法调用,如xxx.sayHello();  支持类静态方法调用和值访问,表达式的格式为@[类全名(包括包路径)]@

徐刘根的博客 2265

YOLO26改进策略【Neck】| CVPR 2024 MFM(Modulation Fusion Module,调制融合模块):动态特征加权融合,突出关键特征抑制冗余

本文主要利用DCMPNet中的 MFM 模块优化 YOLO26 的目标检测网络模型。模块通过动态调制特征融合过程,实现了对多尺度、跨层级特征的智能聚合。将其应用于的改进过程中,针对目标检测中边界特征与语义信息的互补性需求,缓解网络中浅层细节与深层语义融合不足的问题。Depth Information Assisted Collaborative Mutual Promotion Network for Single Image Dehazing在图像去雾网络中,不同层级和类型的特征包含着互补的信息(如浅层的

Limiiiing的博客 221

SAP 系统中的数字签名解决方案及应用案例分析

在当前企业信息化及数字化转型的大背景下,数据安全与身份认证显得尤为重要。数字签名技术作为保障数据真实性和完整性的重要手段,在 SAP 系统中得到了广泛应用。本文将详细探讨 SAP 系统中部分应用场景如何利用数字签名技术满足业务需求,涵盖 SAP Single Sign-On、质量管理、过程工业生产计划以及 SAP ArchiveLink 内容服务器等方面,力求通过深入解读,帮助读者更好地理解和应用这一关键技术。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 526

Struts2学习笔记__Struts标签库和OGNL

Struts2 标签库概述  Struts2标签库相对struts1.x进行了巨大的改进,支持OGNL表达式,不再依赖任何表现层技术。  我们可以在struts2-core-2.5.8.jar压缩文件的META-INF目录下找到struts-tags.tld文件,这个文件#定义了Struts2的标签。 Struts2可以将所有标签分成三类:  用户界面标签(UI标签):主要用来生成HTML元...

茨时代べ 的博客 350

Qualcomm AI Engine Direct SDK(QNN)的使用介绍

Qualcomm AI Engine Direct SDK,高通新的AI模型推理框架,又名QNN,为AI开发提供统一API的底层框架。通过这个SDK,可以在高通的 CPU/GPU和HTP上对AI模型进行性能加速。2.Qualcomm AI Engine Direct SDK的公开英文文档。1.Qualcomm AI Engine Direct SDK的下载和安装。

u013250861的博客 6971

struts2学习笔记(五)—— OGNL

一、OGNL概述 1.1 什么是OGNL   OGNL的全称是对象图导航语言( object-graph Navigation Language),它是一种功能强大的开源表达式语言,使用这种表达式语言,可以通过某种表达式语法,存取Java对象的任意属性,调用Java对象的方法,同时能够自动实现必要的类型转换。如果把表达式看作是一个带有语义的字符串,那么OGNL无疑成为了这个语义字符串...

VNOpU2015的专栏 218

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Struts2学习笔记三:OGNL表达式学习、Struts2与Ognl表达式的结合原理

文章目录1. Struts2学习笔记三:OGNL表达式学习、Struts2与Ognl表达式的结合原理1.1. 什么是OGNL表达式1.2. 使用OGNL表达式1.3. Struts2和ONGL表达式的结合原理 1. Struts2学习笔记三:OGNL表达式学习、Struts2与Ognl表达式的结合原理 1.1. 什么是OGNL表达式 OGNL:对象视图导航语言,是比EL表达式有更加丰富的功能,E...

公子&小白的博客 725

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Struts2学习笔记 | 值栈和OGNL

1.值栈(ValueStack) 引入值栈 在部署第一个Struts2时,Struts2学习笔记 | 部署第一个Struts2项目及其项目解析(IDEA版) Demo里面用${productName}读取productName值时,实际上该属性并不在request等域对象中,而是从值栈中获取的。 值栈的概述 贯穿整个Action的生命周期(每个Actio...

小白菜的博客 182

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Struts2学习笔记四 OGNL

OGNL,全称为Object-GraphNavigationLanguage(对象图表达语言),它是一个功能强大的表达式语言,用来获取和设置Java对象的属性,调用java对象的方法,同时能够自动实现必要的类型转换。它旨在提供一个更高的更抽象的层次来对Java对象图进行导航。如果把表达式看作是一个带有语义的字符串,那么OGNL无疑成为了这个语义字符串与Java对象之间沟通的桥梁。 OGNL:...

weixin_30436101的博客 156

struts2学习笔记之OGNL表达式

     OGNL全称是Object Graph Navigation Lanaguage, 即对象图形导航语言。工作在视图层,用来取代页面中的java脚本。简化数据访问操作。法,和jsp中内置的EL表达相比,它们都是表达式语言,但是OGNL的功能更强大,可以进行类型转换,访问方法,操作集合对象等。 OGNL主要做两件事情, 1. 表达式语言,数据在框架中的流入流出。OGNL提供了一个简单的语...

qq_41311575的博客 393

Struts2学习笔记——OGNL表达式

OGNL,全称为Object-Graph Navigation Language,它是一个功能强大的表达式语言,用来获取和设置Java对象的属性,它旨在提供一个更高的更抽象的层次来对Java对象图进行导航。 OGNL表达式的基本单位是"导航链",一般导航链由如下几个部分组成: 属性名称(property) 方法调用(method invoke) 数组元素 Struts2默认使用OGN

ps_zhanglei的专栏 660

Struts-2.0学习笔记,关于ognl

OGNL OGNL是什么:对象图形导航语言,是Struts-2.0的默认的表达语言,开源,功能强大! 1/存取对象的属性,调用对象方法,访问静态对象方法和属性 2/访问值栈以及Stack Context 3/操作集合对象 4/支持赋值,运算操作,字段类型转化等//在页面上获取并输出Action属性: <s:property value = "userName

堕落者的博客 308

开发者导航:Struts2学习笔记之:OGNL

OGNL是Object Graphic Navigation Language(对象图导航语言)的缩写,它是一个单独的开源项目。 Struts2框架使用OGNL作为默认的表达式语言。OGNL是struts2整合的一个开源项目,所以在struts2中,要想使用OGNL表达式,必须使用Struts2标签库。OGNL相当于EL表示式,从作用域取数据

开发者导航 644

Struts2学习笔记(三)——ognl

ognl ——Object-Graph Navigation Language 对象 对象图导航语言 是Struts2默认的表达式语言,开源,功能更强大 1)存取对象的属性,调用对象的方法,访问静态方法和属性 2)访问值栈(value Stack)和堆栈(Stack Context) 3)操作集合对象 4)支持赋值,运算操作,字段类型转化等 值栈(value Stack)在actio

draft 254

struts2学习笔记【十】/ OGNL

Ognl【Object-Graph Navigation language】它是一种功能强大的表达式语言(EL),可以存储对象的任意属性,调用对象的方法,遍历整个对象的结构图,实现字段类型转化等功能,它使用相同的表达式去存储对象的属性。 1.1. 应用场景 标签中:&lt;s:property  value="user.name" /&gt; 配置文件:&lt;result type="re...

gcfwuwei的专栏 133

Struts2学习笔记(九) OGNL

OGNL介绍 OGNL是Object-Graph Navigation Language的缩写,它是一种功能强大的表达式语言(Expression Language,简称为EL),通过它简单一致的表达式语法,可以存取对象的任意属性,调用对象的方法,遍历整个对象的结构图,实现字段类型转化等功能。它使用相同的表达式去存取对象的属性。 OGNL三要素 (1).expression 求值

whc20011的专栏 473
上一篇: 虞美人
下一篇: struts2学习笔记-Action的配置及基础应用和原理
javaRwx
博客等级 码龄20年 0粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值