ognl 表达式常用表达式语言
从一个客户端的请求开始:
先经过Web.xml 到达struts.xml:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN""http://struts.apache.org/dtds/struts-2.0.dtd"><struts><constant name="struts.enable.DynamicMethodInvocation"value="false" />自动编译<constant name="struts.devMode" value="true" />访问静态属性和方法要设置的<constant name="struts.ognl.allowStaticMethodAccess"value="true"></constant>模块包含,包含ognl.xml<include file="/com/bjsxt/struts2/ognl/ognl.xml" /></struts>
被包含的ognl.xml:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN""http://struts.apache.org/dtds/struts-2.0.dtd"> <struts><package name="ognl" extends="struts-default"><action name="ognl" class="com.bjsxt.struts2.ognl.OgnlAction"><result>/ognl.jsp</result></action><action name="test" class="com.bjsxt.struts2.ognl.TestAction"><result type="chain">ognl</result></action></package> </struts>
OgnlAction 类:
package com.bjsxt.struts2.ognl; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; import com.opensymphony.xwork2.ActionSupport; public class OgnlAction extends ActionSupport {private Cat cat;private Map<String, Dog> dogMap = new HashMap<String, Dog>();private Set<Dog> dogs = new HashSet<Dog>();private String password;private User user;private String username;private List<User> users = new ArrayList<User>();public OgnlAction() {users.add(new User(1));users.add(new User(2));users.add(new User(3));dogs.add(new Dog("dog1"));dogs.add(new Dog("dog2"));dogs.add(new Dog("dog3"));dogMap.put("dog100", new Dog("dog100"));dogMap.put("dog101", new Dog("dog101"));dogMap.put("dog102", new Dog("dog102"));}public String execute() {return SUCCESS;}public Cat getCat() {return cat;}public Map<String, Dog> getDogMap() {return dogMap;}public Set<Dog> getDogs() {return dogs;}public String getPassword() {return password;}public User getUser() {return user;}public String getUsername() {return username;}public List<User> getUsers() {return users;}public String m() {return "hello";}public void setCat(Cat cat) {this.cat = cat;}public void setDogMap(Map<String, Dog> dogMap) {this.dogMap = dogMap;}public void setDogs(Set<Dog> dogs) {this.dogs = dogs;}public void setPassword(String password) {this.password = password;}public void setUser(User user) {this.user = user;}public void setUsername(String username) {this.username = username;}public void setUsers(List<User> users) {this.users = users;} }
Cat类:
package com.bjsxt.struts2.ognl; public class Cat {private Dog friend;public Dog getFriend() {return friend;}public void setFriend(Dog friend) {this.friend = friend;}public String miaomiao() {return "miaomiao";} }
Dog类:
package com.bjsxt.struts2.ognl; public class Dog {private String name ;public Dog() {}public Dog(String name) {super();this.name = name;}public String getName() {return name;}public void setName(String name) {this.name = name;}@Overridepublic String toString() {return "dog: " + name;} }
S类:
package com.bjsxt.struts2.ognl; public class S {public static String STR = "STATIC STRING";public static String s() {return "static method";} }
User类:
package com.bjsxt.struts2.ognl; public class User {private int age = 8;public User() {}public User(int age) {super();this.age = age;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "user" + age;} }
最重要的ognl.jsp(包含访问值栈中各种元素的方法):
<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><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><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><hr /><li>投影(过滤):<s:property value="users.{?#this.age==1}[0]"/></li><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><hr /><li>[]:<s:property value="[0].username"/></li></ol><s:debug></s:debug> struts2提供了一个非常好的调试方法.就是在页面上添加一个debug标签..它会自动帮我们将一些信息显示在页面上;这个值栈又分为两种.Value Stack Contents 和 Stack Context . (1).Value Stack Contents 里面的信息我们可以用 <s:property value="sss"> 这样来直接访问. (2) Stack Context 里面的信息我们可以 <s:property value="#sss">这样来访问 </body>
转载于:https://blog.51cto.com/lfklovemcl/1223842
ognl 表达式常用表达式语言相关推荐
- cron表达式(CRON表达式详解)
Cron表达式是一个字符串,字符串以5或6个空格隔开,分为6或7个域,每一个域代表一个含义,Cron有如下两种语法格式:Seconds Minutes Hours DayofMonth Month D ...
- Lambda表达式常用代码示例
Lambda表达式常用代码示例 2017-10-24 目录 1 Lambda表达式是什么 2 Lambda表达式语法 3 函数式接口是什么 3.1 常用函数式接口 4 Lambdas和Stream ...
- Spring切入点表达式常用写法
Spring切入点表达式常用写法 自从使用AspectJ风格切面配置,使得Spring的切面配置大大简化,但是AspectJ是另外一个开源项目,其规则表达式的语法也稍稍有些怪异. 下面给出一些常见示例 ...
- mel表达式_常用表达式Mel的用法-李英江-
http://www.cgsir.com 2008 年 8 月 目录: 一.介绍 ........................................................... ...
- C语言运算符与表达式课件,C语言课件(运算符和表达式).ppt
C语言课件(运算符和表达式).ppt 运算符与表达式第二讲 运算符和表达式,引例 概念及分类 优先级和结合性 算术运算 关系运算 逻辑运算 位运算 赋值运算符 逗号运算符 条件运算符,引例,引例 问题 ...
- c语言表达式用法,C语言 运算符、表达式和条件结构 用法总结
运算符.表达式和条件结构 内容概要:各种运算符的使用 运算符的优先级 表达式的计算 条件分支结构判断的常用结构 表达式: 表达式是运算符和操作数的组合,如下所示: s = ( n + 9 ) * ( ...
- c语言运算符与表达式ppt,C语言基本运算符与表达式.ppt
<C语言基本运算符与表达式.ppt>由会员分享,可在线阅读,更多相关<C语言基本运算符与表达式.ppt(39页珍藏版)>请在人人文库网上搜索. 1.a,1,基本运算符和表达式, ...
- [JAVAEE] Thymeleaf 基本语法:常用表达式
Thymeleaf 基本语法 常用表达式 变量表达式 ${ } 使用方法:th:xx = "${ }" 获取对象属性值给 th:xx . 后台代码: Student s=new S ...
- c语言表达式用法,C语言开发之运算符、表达式用法
C语言中运算符和表达式数量之多,在高级语言中是少见的.正是丰富的运算符和表达式使C语言功能十分完善.这也是C语言的主要特点之一.C语言的运算符不仅具有不同的优先级,而且还有一个特点,就是它的结合性.在 ...
最新文章
- Linux 的内存管理工具和调优参数
- 【extjs6学习笔记】1.1 初始:创建项目
- 字节Java面试必问:mysql索引类型属于
- Shell遍历hadoop目录的批量操作
- [译]WPF 应用程序和MVVM设计模式 ——Josh Smith
- 如何在ABAP Development Tool里只显示能在SAP云平台上使用的ABAP资源
- 使用UAA OAuth2授权服务器–客户端和资源
- php面试题之一——PHP核心技术(高级部分)
- 【Java】字符串substring方法在jkd6,7,8中的差异
- Windows Server Update Service 3.0 配置向导
- 计算机真有趣作文,真有趣作文10篇
- android黑名单挂断电话(endCall)反射方法获取
- 省级-上市公司数字经济数据(2013-2020年)
- pci-e服务器显卡性能,RTX 2080 Ti PCI-E性能测试:3.0 x16终于成为必需
- cuda 和 pytorch版本不一致torch.cuda.is_available()返回false——解决办法
- python实现趋势外推法
- 原腾讯QQ空间负责人,T13专家,黄希彤被爆近期被裁员,裁员原因令人唏嘘。。...
- android 定制手机刷机,怎么定制安卓刷机包
- AttributeError: Can‘t get attribute ‘SPPF‘ on <module ‘models.common‘ from ‘D:\\ModelTest\\yolov5-5
- android11用石墨文档,轻协作 | 石墨文档 for Android 版轻体验
热门文章
- 如何搭建mysql的学习环境_Mysql学习笔记【一、环境安装配置】
- 【 仿真 】基于多维相似性分析的移动定位方法仿真
- 【 FPGA 】半带 FIR 滤波器(Half-band FIR Filter)
- 函数空间中的最佳逼近
- JDK 5.0 注解的使用
- SSH没有password安全日志
- JavaScript基础初始时期分支(018)
- 获得H.264视频分辨率的方法
- DataTable分页控件设计(适用于Gridview和Repeater)
- php vbcrlf,我是这样打造自已的“菜刀”的,让一句话飞一会