热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Struts2复习之OGNL(1)

Struts2复习

1. 当使用OGNL调用静态方法的时候,需要按照如下语法编写表达式:  @package.classname@methodname(parameter)
2. 对于 OGNL 来说,java.lang.Math 是其的默认类,如果调用java.lang.Math的静态方法时,无需指定类的名字,比如: @@min(4, 10);
3. 对于OGNL来说,数组与集合是一样的,都是通过下标索引来去访问的。构造集合的时候使用{ … }形式。
4. 使用OGNL来处理映射(Map)的语法格式如下所示: #{‘key1’: ‘value1’ , ‘key2’: ‘value2’ , ‘key3’: ‘value3’};
5. 过滤(filtering) :collection.{? expression}
6.  OGNL 针对集合提供了一些伪属性(如 size,isEmpty) ,让我们可以通过属性的方式来调用方法(本质原因在于集合当中的很多方法并不符合JavaBean的命则),       但我么你依然还可以通过调用方法来实现与伪属性相同的目的。
7. 过滤(filtering),获取到集合中的第一个元素:collection.{^ expression}
8. 过滤(filtering),获取到集合中的最后一个元素:collection.{& expression}
9. 在使用过滤操作时,我们通常都会使用#this,该表达式用于代表当前正在迭代的集合中的对象(联想增强的for循环) 
10.    投影(projection):collection.{expression}
11.    过滤与投影之间的差别:类比于数据库中的表,过滤是取行的操作,而投影是取列的操作。

demo:

import java.util.ArrayList;
import java.util.List;
import ognl.Ognl;
import ognl.OgnlContext;
public class OgnlTest
{
public static void main(String[] args) throws Exception
{
Person person = new Person();
person.setName("zhangsan");

Dog dog2 = new Dog();
dog2.setName("hello");

person.setDog(dog2);

Dog dog = new Dog();
dog.setName("wangcai");

OgnlContext cOntext= new OgnlContext();

context.put("person", person);
context.put("dog", dog);

context.setRoot(person); //根对象

Object object = Ognl.parseExpression("#person.dog.name");

System.out.println(object);

Object object2 = Ognl.getValue(object, context, context.getRoot());

System.out.println(object2);

System.out.println("----------------------------");

Object object3 = Ognl.parseExpression("#person.name");

System.out.println(object3);

Object object4 = Ognl.getValue(object3, context, context.getRoot());

System.out.println(object4);

System.out.println("----------------------------");

Object object5 = Ognl.parseExpression("#dog.name");

System.out.println(object5);

Object object6 = Ognl.getValue(object5, context, context.getRoot());

System.out.println(object6);

System.out.println("----------------------------");

Object object7 = Ognl.parseExpression("name.toUpperCase().length()");

System.out.println(object7);

Object object8 = Ognl.getValue(object7, context, context.getRoot());

System.out.println(object8);

System.out.println("----------------------------");

Object object9 = Ognl.parseExpression("@java.lang.Integer@toBinaryString(10)");

System.out.println(object9);

Object object10 = Ognl.getValue(object9, context, context.getRoot());

System.out.println(object10);

System.out.println("----------------------------");

Object object11 = Ognl.parseExpression("@@min(4, 10)");

System.out.println(object11);

Object object12 = Ognl.getValue(object11, context, context.getRoot());

System.out.println(object12);

System.out.println("----------------------------");

Object object13 = Ognl.parseExpression("new java.util.LinkedList()");

System.out.println(object13);

Object object14 = Ognl.getValue(object13, context, context.getRoot());

System.out.println(object14);

System.out.println("----------------------------");

Object object15 = Ognl.getValue("{‘aa‘, ‘bb‘, ‘cc‘, ‘dd‘}[2]", context, context.getRoot());

System.out.println(object15);

System.out.println("----------------------------");

dog.setFriends(new String[]{"aa", "bb", "cc"});

Object object16 = Ognl.getValue("#dog.friends[1]", context, context.getRoot());

System.out.println(object16);

System.out.println("----------------------------");

List list = new ArrayList();

list.add("hello");
list.add("world");
list.add("hello world");

context.put("list", list);

System.out.println(Ognl.getValue("#list[0]", context, context.getRoot()));

System.out.println("----------------------------");

System.out.println(Ognl.getValue("#{‘key1‘: ‘value1‘, ‘key2‘: ‘value2‘, ‘key3‘: ‘value3‘, ‘key4‘: ‘value4‘} [‘key3‘]", context, context.getRoot()));

System.out.println("----------------------------");

List persOns= new ArrayList();

Person p1 = new Person();
Person p2 = new Person();
Person p3 = new Person();

p1.setName("zhangsan");
p2.setName("lisi");
p3.setName("wangwu");

persons.add(p1);
persons.add(p2);
persons.add(p3);

context.put("persons", persons);

//过滤(filtering),collection.{? expression}

System.out.println(Ognl.getValue("#persons.{? #this.name.length() > 4}[0].name", context, context.getRoot()));

//过滤(filtering),获取到集合中的第一个元素, collection.{^ expression}

System.out.println(Ognl.getValue("#persons.{^ #this.name.length() > 4}[0].name", context, context.getRoot()));

//过滤(filtering),获取到集合中的第一个元素, collection.{$ expression}

System.out.println(Ognl.getValue("#persons.{$ #this.name.length() > 4}[0].name", context, context.getRoot()));

System.out.println("----------------------------");

// 投影(projection), collection. {expression}

System.out.println(Ognl.getValue("#persons.{name}", context, context.getRoot()));

System.out.println("----------------------------");

System.out.println(Ognl.getValue("#persons.{#this.name.length() <= 5 ? ‘Hello World‘ : #this.name}", context, context.getRoot()));

}
}


 

Struts2复习之OGNL(1),布布扣,bubuko.com


推荐阅读
  • 本文深入探讨了Java多线程环境下的同步机制及其应用,重点介绍了`synchronized`关键字的使用方法和原理。`synchronized`关键字主要用于确保多个线程在访问共享资源时的互斥性和原子性。通过具体示例,如在一个类中使用`synchronized`修饰方法,展示了如何实现线程安全的代码块。此外,文章还讨论了`ReentrantLock`等其他同步工具的优缺点,并提供了实际应用场景中的最佳实践。 ... [详细]
  • 在 Android 开发中,`android:exported` 属性用于控制组件(如 Activity、Service、BroadcastReceiver 和 ContentProvider)是否可以被其他应用组件访问或与其交互。若将此属性设为 `true`,则允许外部应用调用或与之交互;反之,若设为 `false`,则仅限于同一应用内的组件进行访问。这一属性对于确保应用的安全性和隐私保护至关重要。 ... [详细]
  • Python 伦理黑客技术:深入探讨后门攻击(第三部分)
    在《Python 伦理黑客技术:深入探讨后门攻击(第三部分)》中,作者详细分析了后门攻击中的Socket问题。由于TCP协议基于流,难以确定消息批次的结束点,这给后门攻击的实现带来了挑战。为了解决这一问题,文章提出了一系列有效的技术方案,包括使用特定的分隔符和长度前缀,以确保数据包的准确传输和解析。这些方法不仅提高了攻击的隐蔽性和可靠性,还为安全研究人员提供了宝贵的参考。 ... [详细]
  • 在最近的项目中,我们广泛使用了Qt框架的网络库,过程中遇到了一些挑战和问题。本文旨在记录这些经验和解决方案,以便日后参考。鉴于我们的客户端GUI完全基于Qt开发,我们期望利用其强大的网络功能进行Fiddler网络数据包的捕获与分析,以提升开发效率和应用性能。 ... [详细]
  • Unity3D 中 AsyncOperation 实现异步场景加载及进度显示优化技巧
    在Unity3D中,通过使用`AsyncOperation`可以实现高效的异步场景加载,并结合进度条显示来提升用户体验。本文详细介绍了如何利用`AsyncOperation`进行异步加载,并提供了优化技巧,包括进度条的动态更新和加载过程中的性能优化方法。此外,还探讨了如何处理加载过程中可能出现的异常情况,确保加载过程的稳定性和可靠性。 ... [详细]
  • 在Conda环境中高效配置并安装PyTorch和TensorFlow GPU版的方法如下:首先,创建一个新的Conda环境以避免与基础环境发生冲突,例如使用 `conda create -n pytorch_gpu python=3.7` 命令。接着,激活该环境,确保所有依赖项都正确安装。此外,建议在安装过程中指定CUDA版本,以确保与GPU兼容性。通过这些步骤,可以确保PyTorch和TensorFlow GPU版的顺利安装和运行。 ... [详细]
  • 在Eclipse中提升开发效率,推荐使用Google V8插件以增强Node.js的调试体验。安装方法有两种:一是通过Eclipse Marketplace搜索并安装;二是通过“Help”菜单中的“Install New Software”,在名称栏输入“googleV8”。此插件能够显著改善调试过程中的性能和响应速度,提高开发者的生产力。 ... [详细]
  • 深入解析Java虚拟机的内存分区与管理机制
    Java虚拟机的内存分区与管理机制复杂且精细。其中,某些内存区域在虚拟机启动时即创建并持续存在,而另一些则随用户线程的生命周期动态创建和销毁。例如,每个线程都拥有一个独立的程序计数器,确保线程切换后能够准确恢复到之前的执行位置。这种设计不仅提高了多线程环境下的执行效率,还增强了系统的稳定性和可靠性。 ... [详细]
  • Nginx 反向代理配置与应用指南
    本文详细介绍了 Nginx 反向代理的配置与应用方法。首先,用户可以从官方下载页面(http://nginx.org/en/download.html)获取最新稳定版 Nginx,推荐使用 1.14.2 版本。下载并解压后,通过双击 `nginx.exe` 文件启动 Nginx 服务。文章进一步探讨了反向代理的基本原理及其在实际应用场景中的配置技巧,包括负载均衡、缓存管理和安全设置等,为用户提供了一套全面的实践指南。 ... [详细]
  • POJ 2482 星空中的星星:利用线段树与扫描线算法解决
    在《POJ 2482 星空中的星星》问题中,通过运用线段树和扫描线算法,可以高效地解决星星在窗口内的计数问题。该方法不仅能够快速处理大规模数据,还能确保时间复杂度的最优性,适用于各种复杂的星空模拟场景。 ... [详细]
  • 本指南详细介绍了如何在CentOS 6.6 64位系统上以root用户身份部署Tomcat 8服务器。系统环境为CentOS 6.6 64位,采用源码安装方式。所需软件为apache-tomcat-8.0.23.tar.gz,建议将软件下载至/root/opt目录。具体下载地址请参见官方资源。本指南涵盖了从环境准备到服务启动的完整步骤,适用于需要在该系统环境下搭建高性能Web应用服务器的技术人员。 ... [详细]
  • 该问题可能由守护进程配置不当引起,例如未识别的JVM选项或内存分配不足。建议检查并调整JVM参数,确保为对象堆预留足够的内存空间(至少1572864KB)。此外,还可以优化应用程序的内存使用,减少不必要的内存消耗。 ... [详细]
  • 二分查找算法详解与应用分析:本文深入探讨了二分查找算法的实现细节及其在实际问题中的应用。通过定义 `binary_search` 函数,详细介绍了算法的逻辑流程,包括初始化上下界、循环条件以及中间值的计算方法。此外,还讨论了该算法的时间复杂度和空间复杂度,并提供了多个应用场景示例,帮助读者更好地理解和掌握这一高效查找技术。 ... [详细]
  • 蚂蚁课堂:性能测试工具深度解析——JMeter应用与实践
    蚂蚁课堂:性能测试工具深度解析——JMeter应用与实践 ... [详细]
  • 在 iOS 开发中,经常会遇到 `@(YES)`、`@[firstViewController]` 以及 `@{@a:@b}` 这样的语法糖。这些简化的写法分别用于初始化布尔值、数组和字典对象,能够显著提高代码的可读性和编写效率。例如,`@(YES)` 可以快速创建一个布尔值对象,`@[firstViewController]` 则用于创建包含单个元素的数组,而 `@{@a:@b}` 则用于创建键值对字典。理解这些语法糖的使用方法,有助于开发者更加高效地进行编码。 ... [详细]
author-avatar
多米音乐_34026248
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有