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

jueljava_Juel基本使用

Juel是JavaUnifiedExpressionLanguage的简称,即Java统一表达语言,在JSP2.1标准(JSR-245)中定义的一部分。

Juel是Java Unified Expression Language的简称,即Java统一表达语言,在JSP2.1标准(JSR-245)中定义的一部分。尽管EL表达式是伴随着JSP而生,但现在已经可以在非JSP应用中使用,相关的API放在javax.el包里面。

Juel是统一表达语言轻量而高效级的实现,具有高性能,插件式缓存,小体积,支持方法调用和多参数调用,可插拔多种特性。具体可以去Juel官方网站进行详细阅读,本文基于官方文档写一下简单的使用说明。

1. 引入依赖

使用Juel首先需要引入以下的三个依赖,版本可以自己选择

de.odysseus.juel

juel-api

2.2.7

de.odysseus.juel

juel-impl

2.2.7

de.odysseus.juel

juel-spi

2.2.7

2. 最简单的例子

在看官方给出的quick start中的例子之前,先看看一个更简单的,实际上在项目中大多也是这种模式的应用。如下代码所示,需要做的事情很简单,即将字符串{"argIn1":"

math?formula=%7Bvar1%7D%5C%22%2C%5C%22argIn2%5C%22%3A%5C%22{var2}"}解析为{"argIn1":"Hello","argIn2":"World"}, 要实现该目的基本上分为三步走

step1. 创建基本的工厂类和上下方以供下面使用

step2. 设置变量值

step3. 解析字符串

//step1

ExpressionFactory factory = new ExpressionFactoryImpl();

SimpleContext context = new SimpleContext();

//step2

context.setVariable("var1", factory.createValueExpression("Hello", String.class));

context.setVariable("var2", factory.createValueExpression("World", String.class));

//step3

String s = "{\"argIn1\":\"${var1}\",\"argIn2\":\"${var2}\"}";

ValueExpression e = factory.createValueExpression(context, s, String.class);

System.out.println(e.getValue(context));// --> {"argIn1":"Hello","argIn2":"World"}

3.官方示例

看懂上面简单的示例后再来看官方quick start就更轻松一点。这里面内容更丰富一点,包括对方法的解析,分另用context和factory两种方式来给变量赋值,最后将${math:max(foo,bar)}成功解析为取foo和bar更大的一个。

// the ExpressionFactory implementation is de.odysseus.el.ExpressionFactoryImpl

ExpressionFactory factory = new ExpressionFactoryImpl();

// package de.odysseus.el.util provides a ready-to-use subclass of ELContext

SimpleContext context = new SimpleContext();

// map function math:max(int, int) to java.lang.Math.max(int, int)

context.setFunction("math", "max", Math.class.getMethod("max", int.class, int.class));

// map variable foo to 0

context.setVariable("foo", factory.createValueExpression(0, int.class));

// parse our expression

ValueExpression e = factory.createValueExpression(context, "${math:max(foo,bar)}", int.class);

// set value for top-level property "bar" to 1

factory.createValueExpression(context, "${bar}", int.class).setValue(context, 1);

// get value for our expression

System.out.println(e.getValue(context)); // --> 1

4. 简单解析器

Juel提供SimpleResolver类作为基本的解析器来解析表达式中的属性,如下所示,既可以解析top-level属性,也可以解析bean。

ExpressionFactory factory = new ExpressionFactoryImpl();

SimpleContext context = new SimpleContext(new SimpleResolver());

// resolve top-level property

factory.createValueExpression(context, "#{pi}", double.class).setValue(context, Math.PI);

ValueExpression expr1 = factory.createValueExpression(context, "${pi/2}", double.class);

System.out.println("pi/2 = " + expr1.getValue(context)); // pi/2 = 1.5707963267948966

// resolve bean property

factory.createValueExpression(context, "#{current}", Date.class).setValue(context, new Date());

ValueExpression expr2 = factory.createValueExpression(context, "${current.time}", long.class);

System.out.println("current.time = " + expr2.getValue(context));// --> current.time = 1538048848843



推荐阅读
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • PHP图片截取方法及应用实例
    本文介绍了使用PHP动态切割JPEG图片的方法,并提供了应用实例,包括截取视频图、提取文章内容中的图片地址、裁切图片等问题。详细介绍了相关的PHP函数和参数的使用,以及图片切割的具体步骤。同时,还提供了一些注意事项和优化建议。通过本文的学习,读者可以掌握PHP图片截取的技巧,实现自己的需求。 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • Html5-Canvas实现简易的抽奖转盘效果
    本文介绍了如何使用Html5和Canvas标签来实现简易的抽奖转盘效果,同时使用了jQueryRotate.js旋转插件。文章中给出了主要的html和css代码,并展示了实现的基本效果。 ... [详细]
  • Learning to Paint with Model-based Deep Reinforcement Learning
    本文介绍了一种基于模型的深度强化学习方法,通过结合神经渲染器,教机器像人类画家一样进行绘画。该方法能够生成笔画的坐标点、半径、透明度、颜色值等,以生成类似于给定目标图像的绘画。文章还讨论了该方法面临的挑战,包括绘制纹理丰富的图像等。通过对比实验的结果,作者证明了基于模型的深度强化学习方法相对于基于模型的DDPG和模型无关的DDPG方法的优势。该研究对于深度强化学习在绘画领域的应用具有重要意义。 ... [详细]
  • Android自定义控件绘图篇之Paint函数大汇总
    本文介绍了Android自定义控件绘图篇中的Paint函数大汇总,包括重置画笔、设置颜色、设置透明度、设置样式、设置宽度、设置抗锯齿等功能。通过学习这些函数,可以更好地掌握Paint的用法。 ... [详细]
  • Todayatworksomeonetriedtoconvincemethat:今天在工作中有人试图说服我:{$obj->getTableInfo()}isfine ... [详细]
  • Spring框架《一》简介
    Spring框架《一》1.Spring概述1.1简介1.2Spring模板二、IOC容器和Bean1.IOC和DI简介2.三种通过类型获取bean3.给bean的属性赋值3.1依赖 ... [详细]
  • WPF之Binding初探
      初学wpf,经常被Binding搞晕,以下记录写Binding的基础。首先,盗用张图。这图形象的说明了Binding的机理。对于Binding,意思是数据绑定,基本用法是:1、 ... [详细]
  • 获取时间的函数js代码,js获取时区代码
    本文目录一览:1、js获取服务器时间(动态)2 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • 先看官方文档TheJavaTutorialshavebeenwrittenforJDK8.Examplesandpracticesdescribedinthispagedontta ... [详细]
  • 本文介绍了在Android开发中使用软引用和弱引用的应用。如果一个对象只具有软引用,那么只有在内存不够的情况下才会被回收,可以用来实现内存敏感的高速缓存;而如果一个对象只具有弱引用,不管内存是否足够,都会被垃圾回收器回收。软引用和弱引用还可以与引用队列联合使用,当被引用的对象被回收时,会将引用加入到关联的引用队列中。软引用和弱引用的根本区别在于生命周期的长短,弱引用的对象可能随时被回收,而软引用的对象只有在内存不够时才会被回收。 ... [详细]
  • 浅解XXE与Portswigger Web Sec
    XXE与PortswiggerWebSec​相关链接:​博客园​安全脉搏​FreeBuf​XML的全称为XML外部实体注入,在学习的过程中发现有回显的XXE并不多,而 ... [详细]
author-avatar
妞妞盼寒假_197
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有