当前位置: 首页 > news >正文

OGNL 的表达式

 目录

概念

基本原理

基本语法

1、访问Root区域对象基本语法

 2、访问Context区域对象基本语法

符号含义


概念

Object-Graph Navigation Language 对象-图形导航语言, 主要用于访问对象的数据和方法。

基本原理

主要由3部分构成:
1.OGNL引擎
         负责解析ONGL表达式,定位数据。解析表达式的过程包括词法分析、语法分析和执行。词法分析将表达式分解为标记,语法分析将标记转换为语法树,执行遍历语法树,执行表达式。

2.Root根存储区(Object类型)
         Root根存储区是一个特殊的对象,它是OGNL表达式的起点。OGNL表达式可以从Root根存储区开始,然后沿着对象图向下导航,访问对象的属性、方法和数组元素。在Java Web应用程序中,Root根存储区通常是一个JavaBean对象。在Spring框架中,ModelAndView对象通常作为Root根存储区,它包含了需要在JSP页面中显示的数据。

3.Context变量存储区(Map类型)
        是 一个Map对象,用于存储OGNL表达式中使用的变量。可以使用#符号引用Context变量存储区中的变量。

基本语法

1、访问Root区域对象基本语法

    --访问简单数据:"属性"
     例如"name"
     
    --访问数组或List集合:"属性[0]"
     例如"arr[1]"
    
    --访问Map集合:"属性['key']"或"属性.key"
     例如"map.two"或"map['two']"
    
    --访问方法:"属性值.方法()",
     例如"list.size()"
    
    --访问构造方法:"new 包名.构造方法"
     例如"new java.util.Date()"
    
    --访问静态成员:"@包名.类名@成员"
     例如"@java.lang.Math@PI"
    
    --创建List对象:"{元素1,元素2}"
    
    --创建Map对象:
    "#{key1:value1,key2:value2}"

 2、访问Context区域对象基本语法

使用Context变量存储区中的变量   
#context.user.name = "John"
#context.user.age = 30
例如:
Welcome, ${#context.user.name}! You are ${#context.user.age} years old.

符号含义

`#`:引用上下文对象,通常是Action或ValueStack对象。
`%`:引用ActionContext对象,它包含Action执行的上下文信息。
`$`:引用请求参数,例如 `$paramName` 引用名为 `paramName` 的请求参数。  
`@`:引用类静态方法或属性,例如 `@java.lang.Math@PI` 引用Math类的PI属性。

除了这些符号外,OGNL还支持许多其他运算符和表达式,例如算术运算符、逻辑运算符、比较运算符、正则表达式等。

例如:
#符号
引用上下文变量,关于OGNL 的上下文对象类型【获取属性值】:
(1)javaBean对象,例如上面的User,则 OGNL 表达式格式必须为 #{属性名}

(2)map 对象,OGNL 表达式格式为 #{key}

(3)简单类型对象(基本类型、String类型),OGNL 表达式格式为 #{随便造}

(4)操作集合对象

构造map对象,例如:

#{'foo1':'bar1', 'foo2':'bar2'}

构造list对象,例如:

{'男','女'}

%符号
%符号的用途是在标志的属性为字符串类型时,计算OGNL表达式的值。例如:

<s:set name="foobar" value="#{'foo1':'bar1', 'foo2':'bar2'}" />
<p>不使用%:<s:url value="#foobar['foo1']" /></p>
<p>使用%:<s:url value="%{#foobar['foo1']}" /></p>

结果:
不使用%:#foobar['foo1']
使用%:bar1

@符号

 类静态的方法|值调用,格式为"@[类全名(包括包路径)]@[方法名|值名]",例如:

@java.lang.String@format('foo%s','bar')--调用类静态方法
@java.lang.String@CASE_INSENSITIVE_ORDER--访问类的静态值

更多,可以参考官网文档:
OGNL - Apache Commons OGNL - Language Guide

相关文章:

OGNL 的表达式

目录 概念 基本原理 基本语法 1、访问Root区域对象基本语法 2、访问Context区域对象基本语法 符号含义 概念 Object-Graph Navigation Language 对象-图形导航语言&#xff0c; 主要用于访问对象的数据和方法。 基本原理 主要由3部分构成&#xff1a;1.OGNL引擎 …...

JAVA面试中遇到的那些坑,80%的人都种过招

面试&#xff0c;是很多学完Java开发的人不得不面对的问题。小编经常听到学员抱怨&#xff0c;明明觉得自己学的不错&#xff0c;为什么到了面试的时候就凉凉了?为什么有的面试官会一直问业务层面的问题&#xff0c;让人措手不及? 其实&#xff0c;我们在学习Java知识的同时…...

【测试开发】单元测试、基准测试和性能分析(以 Go testing 为例)

一、为什么需要测试&#x1f914;️ 你写不出 bug-free 的代码。你认为自己写出了 bug-free 的代码&#xff0c;但它在你意想不到的地方出错了。你觉得自己写出了永不出错的代码&#xff0c;但它的性能十分糟糕。 二、在开发过程中做好测试&#xff08;理想情况下&#xff09;…...

linux中一条命令查询当前端口的进程,然后拿到进程pid,作为另一条杀死进程的参数

1. 可以使用lsof命令来查询端口对应的进程&#xff0c;然后使用awk命令提取PID&#xff0c;最后将其作为另一条命令的参数。 例如&#xff0c;如果要查询端口为8080的进程&#xff1a; lsof -i :8080 | awk NR2{print $2}其中&#xff0c;-i选项指定查询网络连接&#xff0c;…...

程序员找工作难吗?我用亲身经历来告诉大家

我看到很多同学说今年的程序员找工作难。我的心里也有一定预期&#xff0c;但直到我出来之后才真正地感受到这股寒冬有多么凛冽。 一个外包公司有四五个招聘人员&#xff0c;然后外包公司有十来个&#xff0c;一个公司的岗位会分发给这些各个不同的外包公司。所以你看到我沟通…...

【Web服务】HTTP和DNS重要知识

304状态码 HTTP状态码中的304状态码表示"未修改"&#xff0c;通常在客户端发起了一个带有If-Modified-Since头部的GET请求时会得到这个响应。服务器通过比较If-Modified-Since头部指定的时间戳和资源的最后修改时间来判断资源是否被修改过&#xff0c;如果没有修改则…...

【C++】-关于类和对象的默认成员函数(中)-拷贝构造函数和赋值运算符重载函数

&#x1f496;作者&#xff1a;小树苗渴望变成参天大树 ❤️‍&#x1fa79;作者宣言&#xff1a;认真写好每一篇博客 &#x1f4a8;作者gitee:gitee &#x1f49e;作者专栏&#xff1a;C语言,数据结构初阶,Linux,C 如 果 你 喜 欢 作 者 的 文 章 &#xff0c;就 给 作 者 点…...

c++11上篇

c11 1.C11简介2.列表初始化2.1 &#xff5b;&#xff5d;初始化2.2 std::initializer_list 3.变量类型推导3.1 auto3.2 decltype3.3 nullptr 4.范围for循环5.final与override6.智能指针7.新增加容器---静态数组array、forward_list以及unordered系列8.默认成员函数控制9.右值引…...

异构无线传感器网络路由算法研究(Matlab代码实现)

目录 &#x1f4a5;1 概述 &#x1f4da;2 运行结果 &#x1f389;3 参考文献 &#x1f468;‍&#x1f4bb;4 Matlab代码 &#x1f4a5;1 概述 ​无线传感器网络(Wireless Sensor Networks, WSN)是一种新型的融合传感器、计算机、通信等多学科的信息获取和处理技术的网络,…...

MySQL数据库——MySQL TRUNCATE:清空表记录

MySQL 提供了 DELETE 和 TRUNCATE 关键字来删除表中的数据。下面主要讲解一下 TRUNCATE 关键字的使用。 TRUNCATE 关键字用于完全清空一个表。其语法格式如下&#xff1a; TRUNCATE [TABLE] 表名 其中&#xff0c;TABLE 关键字可省略。 例 1 新建表 tb_student_course&…...

财报解读:连续三年逆势增长的背后,欧派家居到底靠的是什么?

能在过去3年逆势增长的家居企业并不多&#xff0c;而欧派家居就是其中一个。4月25日&#xff0c;欧派家居发布2022年年度报告。据年报数据显示&#xff0c;2022年&#xff0c;欧派家居共实现营业收入224.80亿元&#xff0c;净利润约26.88亿元。 从2020年到2022年&#xff0c;欧…...

希望计算机专业同学都知道这些宝藏博主

湖科大教书匠——计算机网络 “宝藏老师”、“干货满满”、“羡慕湖科大”…这些都是网友对这门网课的评价&#xff0c;可见网课质量之高&#xff01; 湖南科技大学《计算机网络》微课堂是该校高军老师精心制作的视频课程&#xff0c;用简单的语言描述复杂的问题&#xff0c;…...

1694_week1_MIT使用Python编程学习手记1

全部学习汇总&#xff1a; GreyZhang/python_basic: My learning notes about python. (github.com) 首先说明一下&#xff0c;这部分信息的整理只是我个人的理解。由于自己的知识功底以及英语水准&#xff0c;很可能会有大量的疏漏。再此&#xff0c;我只想把自己学习时候的一…...

第二十一章 光源

光源是每个场景必不可少的部分&#xff0c;光源除了能够照亮场景之外&#xff0c;还可以产生阴影效果。 Unity中分为四种光源类型&#xff1a; 1. 方向光&#xff1a;Directional Light 用于模拟太阳光&#xff0c;方向光任何地方都能照射到。 2. 点光源&#xff1a;Point L…...

CVPR 2023 超分辨率(super-resolution)方向上接收论文总结

目录 CVPR 2023图像超分任意尺度超分盲超分 视频超分特殊场景 总结参考资料 CVPR 2023 官网链接&#xff1a;https://cvpr2023.thecvf.com/ 会议时间&#xff1a;2023年6月18日-6月22日&#xff0c;加拿大温哥华 CVPR 2023统计数据&#xff1a; 提交&#xff1a;9155篇论文接…...

Python 基于 Django 的学生成绩管理系统,可视化界面(附源码,教程)

1简介 对于学生成绩管理系统&#xff0c;充分运用现代化的信息技术手段&#xff0c;对于学生成绩信息管理发展的趋势就是信息化&#xff0c;信息化时代下的信息管理&#xff0c;需要深化信息管理体制与手段的改革&#xff0c;充分运用信息化手段来全方位的进行学生成绩管理系统…...

第二弹进阶吴恩达 ChatGPT Prompt 技巧

第一弹笔记在这里&#xff1a; 总结吴恩达 ChatGPT Prompt 免费课程 今天分享第二弹&#xff0c;进阶篇。 第一点&#xff0c;任务序列化。 通常看完一篇长文&#xff0c;脑子里往往充满无数疑问。急切想知道所有答案&#xff0c;必须列一个问题清单。对话式问法&#xff0c;对…...

约瑟夫环问题

约瑟夫问题 题目描述 n n n 个人围成一圈&#xff0c;从第一个人开始报数,数到 m m m 的人出列&#xff0c;再由下一个人重新从 1 1 1 开始报数&#xff0c;数到 m m m 的人再出圈&#xff0c;依次类推&#xff0c;直到所有的人都出圈&#xff0c;请输出依次出圈人的编号。…...

JavaScript中的异步编程

当我们在编写JavaScript代码时&#xff0c;经常会遇到需要执行长时间运行的任务的情况&#xff0c;例如从服务器获取数据或进行复杂的计算。在这些情况下&#xff0c;我们不希望阻塞用户界面&#xff0c;因为这会使网站看起来卡顿&#xff0c;甚至无响应。为了避免这种情况&…...

奥斯汀独家对话|从机构的「拉扯」中成长的美国加密监管

‍前言 4月25日&#xff0c;在美国得克萨斯州的首府奥斯汀&#xff0c;这座充满活力和创造力的城市&#xff0c;欧科云链研究院与来自哥伦比亚商学院的Austin Campbell教授就美国加密监管以及其相关话题进行了一次深入探讨。双方讨论了美国整体的监管问题、监管逻辑、最新的稳…...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘

美国西海岸的夏天&#xff0c;再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至&#xff0c;这不仅是开发者的盛宴&#xff0c;更是全球数亿苹果用户翘首以盼的科技春晚。今年&#xff0c;苹果依旧为我们带来了全家桶式的系统更新&#xff0c;包括 iOS 26、iPadOS 26…...

vue3 定时器-定义全局方法 vue+ts

1.创建ts文件 路径&#xff1a;src/utils/timer.ts 完整代码&#xff1a; import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...

自然语言处理——Transformer

自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效&#xff0c;它能挖掘数据中的时序信息以及语义信息&#xff0c;但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN&#xff0c;但是…...

优选算法第十二讲:队列 + 宽搜 优先级队列

优选算法第十二讲&#xff1a;队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...

基于Java+VUE+MariaDB实现(Web)仿小米商城

仿小米商城 环境安装 nodejs maven JDK11 运行 mvn clean install -DskipTestscd adminmvn spring-boot:runcd ../webmvn spring-boot:runcd ../xiaomi-store-admin-vuenpm installnpm run servecd ../xiaomi-store-vuenpm installnpm run serve 注意&#xff1a;运行前…...

探索Selenium:自动化测试的神奇钥匙

目录 一、Selenium 是什么1.1 定义与概念1.2 发展历程1.3 功能概述 二、Selenium 工作原理剖析2.1 架构组成2.2 工作流程2.3 通信机制 三、Selenium 的优势3.1 跨浏览器与平台支持3.2 丰富的语言支持3.3 强大的社区支持 四、Selenium 的应用场景4.1 Web 应用自动化测试4.2 数据…...

若依登录用户名和密码加密

/*** 获取公钥&#xff1a;前端用来密码加密* return*/GetMapping("/getPublicKey")public RSAUtil.RSAKeyPair getPublicKey() {return RSAUtil.rsaKeyPair();}新建RSAUti.Java package com.ruoyi.common.utils;import org.apache.commons.codec.binary.Base64; im…...

AxureRP-Pro-Beta-Setup_114413.exe (6.0.0.2887)

Name&#xff1a;3ddown Serial&#xff1a;FiCGEezgdGoYILo8U/2MFyCWj0jZoJc/sziRRj2/ENvtEq7w1RH97k5MWctqVHA 注册用户名&#xff1a;Axure 序列号&#xff1a;8t3Yk/zu4cX601/seX6wBZgYRVj/lkC2PICCdO4sFKCCLx8mcCnccoylVb40lP...

【大厂机试题解法笔记】矩阵匹配

题目 从一个 N * M&#xff08;N ≤ M&#xff09;的矩阵中选出 N 个数&#xff0c;任意两个数字不能在同一行或同一列&#xff0c;求选出来的 N 个数中第 K 大的数字的最小值是多少。 输入描述 输入矩阵要求&#xff1a;1 ≤ K ≤ N ≤ M ≤ 150 输入格式 N M K N*M矩阵 输…...

组合模式:构建树形结构的艺术

引言:处理复杂对象结构的挑战 在软件开发中,我们常遇到需要处理部分-整体层次结构的场景: 文件系统中的文件与文件夹GUI中的容器与组件组织结构中的部门与员工菜单系统中的子菜单与菜单项组合模式正是为解决这类问题而生的设计模式。它允许我们将对象组合成树形结构来表示&…...