OGNL 表达式

本文详细介绍了对象图导航语言(OGNL)的基本用法及各种应用场景,包括如何使用OGNL访问对象属性、方法、静态成员等,并展示了如何操作集合、映射等复杂数据结构。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

具体请看范例:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
	<ol>
		<!-- OGNL: object graph navigation language ,对象图导航语言-->
		<!-- <s:property value="username"/>:这整个是s标签,只有标签中的username才是OGNL表达式 -->
		<li>访问值栈action中的普通属性:username = <s:property value="username"/></li>
		<!-- <s:property value="user。age"/>:只有标签中的 user.age 才是OGNL表达式 ,这里要注意,只有传值的时候才会构建user对象,不传值页面取值为null,-->
			<!-- 当java类中有很多构造方法时,一定要确保有一个空的构造方法,不然就会报错,切记,domain中一定要有一个空构造 -->
		<li>访问值栈中对象的普通属性(setter,getter方法):<s:property value="user.age"/></li>

		<li>访问值栈中对象的普通属性:<s:property value="password.length()"/></li>
		<!-- cat.miaomiao()方法返回一个字符串,那这个值就是一个字符串 -->
		<li>访问值栈中对象的普通方法:<s:property value="cat.miaomiao()"/></li>
		<!-- 在action中定义一个 public String hello(){return "hello word!"} 普通方法-->
		<li>访问值栈中action的普通方法:<s:property value="hello()"/></li>
		
		<!-- ############################################################################################ -->
		<!-- 假如 NAME 是一个静态属性 -->
		<li>访问静态属性:<s:property value="@com.haizhu.User@NAME"/></li>
		<!-- 假如 CRY() 是一个静态方法,返回一个String类型的结果 -->
		<li>访问静态方法:<s:property value="@com.haizhu.User@CRY()"/></li>

		<!-- ############################################################################################ -->
		<!-- 调用user(String str)构造方法,覆写toString()方法, -->
		<li>访问普通类的构造方法:<s:property value="new com.haizhu.User('haizhu')"/></li>
		
		<!-- ############################################################################################ -->
		<li>访问list:<s:property value="users"/></li>
		<li>访问list中某个元素:<s:property value="users[0]"/></li>
		<li>访问list中某个属性的集合:<s:property value="users.{age}"/></li>
		<li>访问list中某个属性的集合中的特定值(一般使用第二种方法):<s:property value="users.{age}[0]"/>|<s:property value="users[0].age"/></li>
		<!-- 方法set和方法list不一样,set没有顺序,所以不能使用下标 -->
		<li>访问set:<s:property value="users"/></li>
		<li>访问map:<s:property value="userMap"/></li>
		<!-- 可以使用单引号,也可以使用双引号,使用双引号的时候要使用转义符 -->
		<li>访问map中某个元素:<s:property value="userMap.key1"/>|<s:property value="userMap['key1']"/>|<s:property value="userMap[\"key1\"]"/></li>
		<li>访问map中所有的key:<s:property value="userMap.keys"/></li>
		<li>访问map中所有的value:<s:property value="userMap.values"/></li>
		<li>访问容器的大小:<s:property value="userMap.size()"/></li>
		
		<!-- ############################################################################################ -->
		<!-- users集合中age等于1的 age集合,也就是1的集合,有几个符合的对象,集合就有几个1 -->
		<li>投影(过滤):<s:property value="users.{?#this.age==1}.{age}"/></li>
		<!-- users集合中age大于1的user中的第一个user的age集合,也就是第一个符合的user的age,不过封装成了集合 -->
		<li>投影(过滤):<s:property value="users.{^#this.age>1}.{age}"/></li>
		<!-- 最后一个符合的user的age集合 -->
		<li>投影(过滤):<s:property value="users.{$#this.age>1}.{age}"/></li>
		<!-- 判断符合条件的这个集合是否为空 -->
		<li>投影(过滤):<s:property value="users.{$#this.age>1}.{age} == null"/></li>
		
		<!-- ############################################################################################ -->
		<!-- 这是访问action值栈中,从上往下的值 , -->
			<!-- [0],代表action的位置, -->
		<li>中括号[]:<s:property value="[0]"/></li>
		<li>中括号[]:<s:property value="[0].username"/></li>
	</ol>
</body>
</html>

怎么样,有没有理解 OGNL 和 EL 表达式的区别?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值