首先解释一下:OGNL全称为:Object Graph Notation Language,即对象图形导航语言。
在以下的代码里,value中的那一小段才是OGNL,是struts标签。所以对象图形导航语言,就是指通过一个对象可以导航到另一个对象,或者属性。例如有一只狗,狗有一个名字,有只猫,猫的朋友是狗。那么久可以通过:猫.狗.狗的名字,来访问狗的名字。
<?xml version="1.0" encoding="GB18030" ?>
<%@ page language="java" contentType="text/html; charset=GB18030"
pageEncoding="GB18030"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030" />
<title>OGNL表达式语言学习</title>
</head>
<body>
<ol>
<li>访问值栈中的action的普通属性: username = <s:property value="username"/> </li>
<li>访问值栈中对象的普通属性(get set方法):<s:property value="user.age"/> | <s:property value="user['age']"/> | <s:property value="user[\"age\"]"/> | wrong: <%--<s:property value="user[age]"/>--%></li>
<li>访问值栈中对象的普通属性(get set方法): <s:property value="cat.friend.name"/></li>
<li>访问值栈中对象的普通方法:<s:property value="password.length()"/></li>
<li>访问值栈中对象的普通方法:<s:property value="cat.miaomiao()" /></li>
<li>访问值栈中action的普通方法:<s:property value="m()" /></li>
<hr />
<li>访问静态方法:<s:property value="@com.bjsxt.struts2.ognl.S@s()"/></li>
<li>访问静态属性:<s:property value="@com.bjsxt.struts2.ognl.S@STR"/></li>
<li>访问Math类的静态方法:<s:property value="@@max(2,3)" /></li>
<hr />
<li>访问普通类的构造方法:<s:property value="new com.bjsxt.struts2.ognl.User(8)"/></li>
<hr />
<li>访问List:<s:property value="users"/></li>
<li>访问List中某个元素:<s:property value="users[1]"/></li>
<li>访问List中元素某个属性的集合:<s:property value="users.{age}"/></li>
<li>访问List中元素某个属性的集合中的特定值:<s:property value="users.{age}[0]"/> | <s:property value="users[0].age"/></li>
<li>访问Set:<s:property value="dogs"/></li>
<li>访问Set中某个元素:<s:property value="dogs[1]"/></li><!--set是没有顺序的,所以取下标值是没有意义的-->
<li>访问Map:<s:property value="dogMap"/></li>
<li>访问Map中某个元素:<s:property value="dogMap.dog101"/> | <s:property value="dogMap['dog101']"/> | <s:property value="dogMap[\"dog101\"]"/></li><!--取出key为dog101的值-->
<li>访问Map中所有的key:<s:property value="dogMap.keys"/></li>
<li>访问Map中所有的value:<s:property value="dogMap.values"/></li>
<li>访问容器的大小:<s:property value="dogMap.size()"/> | <s:property value="users.size"/> </li><!--不加ku9ohao也可以访问-->
<hr />
<li>投影(过滤):<s:property value="users.{?#this.age==1}[0]"/></li><!--格式固定,this指循环过程中的每一个对象。取出users里age等于1的集合里面的第一个元素-->
<li>投影:<s:property value="users.{^#this.age>1}.{age}"/></li><!--^指第一个元素-->
<li>投影:<s:property value="users.{$#this.age>1}.{age}"/></li><!--$指结尾的元素-->
<li>投影:<s:property value="users.{$#this.age>1}.{age} == null"/></li><!--查看age>1的user的age是否为空-->
<hr />
<li>[]:<s:property value="[0].username"/></li>
<!--指value stack栈顶的那个Action,因为action在栈顶。0值value stack从上往下数的第几0个元素 -->
<!--[0]代表action的位置,而不是action那个对象,[0]代表从0往下数到栈底的对象的集合。-->
<!--[0].username,如果有多个action,在第一个action里找不到[0].username,会往下找-->
</ol>
<s:debug></s:debug>
</body>
</html>
感谢马士兵老师精彩的讲解。谢谢!
分享到:
相关推荐
尚学堂Java笔记.pdf
尚学堂马士兵hibernate视频笔记,很详细的,各种配置都有的......
文档部分内容如下, 全部是尚学堂课堂原笔记.. 第一课:客户端 1. Sql Plus(客户端),命令行直接输入:sqlplus,然后按提示输入用户名,密码。 2. 从开始程序运行:sqlplus,是图形版的sqlplus. 3. ...
四个SSH框架实战项目源码加尚学堂课件笔记
尚学堂Spring学习笔记.马士兵的,看了很受用,摘录了一些
hadoop大数据培训零基础学习hadoop-北京尚学堂.pdf
spark笔记整理文档spark笔记整理文档spark笔记整理文档
NULL 博文链接:https://firefly1022.iteye.com/blog/724912
尚学堂hibernate学习笔记(原版整理),配合视频教程使用
hadoop大数据培训零基础学习hadoop-北京尚学堂整理.pdf
hadoop大数据培训零基础学习hadoop-北京尚学堂.docxhadoop大数据培训零基础学习hadoop-北京尚学堂.docx
NULL 博文链接:https://mixo44.iteye.com/blog/1797079
94768045334645404_项目截图【北京尚学堂·百战程序员】.rar
尚学堂学习uml的笔记,希望给初学者指导迷津
自己学习时做的笔记,比较详细 全部为视频顺序截图,每个概念都包括在内,还有讲解的答案
亲身在B站学习MySQL整理的全套笔记
这个是尚学堂马士兵老师讲解Oracle时用到的一些,希望对大家有帮助...
本词汇表汇集了软件开发编程中常见的词汇,为尚学堂学员孙BO同学整理。孙BO同学坚持将自己在开发中碰到的词汇一一整理,彻底贯彻了高淇老师的”见一个消灭一个”的原则。孙BO同学早已实现了非常高质量的就业,现薪水...
MongoDB数据库学习整理资料,里面从数据库的安装和配置,以及配置创建数据数据,查询,修改,删除等。
此笔记由本人跟随尚学堂教师一步一讲解梳理出来的 网关的角色是作为一个 API 架构,用来保护、增强和控制对于 API 服务的访问。 API 网关是一个处于应用程序或服务(提供 REST API 接口服务)之前的系统,用来管理...