【Java】原生 EL 表达式对象属性访问
Java EL(Expression Language)是一种用于在Java应用程序中评估和访问数据的强大工具。它提供了一种简洁的语法,允许开发人员轻松地在模板中嵌入动态数据,或者在配置文件中定义属性值。本文将为您介绍Java EL表达式的基本概念和EL表达式属性导航问题。
本文简单介绍 EL 语法,并演示了对象属性访问的一个示例
EL 表达式语法
EL 表达式通常用 ${} 包围,例如 ${user.name} 可以获取用户的名称
- 对象引用:
${user}表示引用名为user的JavaBean对象。 - 属性访问:
${user.name}表示访问user对象的name属性。 - 方法调用:
${user.calculateAge()}表示调用user对象的calculateAge方法。 - 运算符:EL 表达式支持各种运算符,如加法、减法、逻辑运算等。
在一些 EL 表达式框架中,还常常包含一些内置的属性,如 Tomcat 实现的 EL 表达式框架中就内置了 ${pageContext.request} , 这个值通常是为 JSP 使用的。
属性访问示例
创建 User 对象
package com.xzbd.elDemo;public class User {private String name;public User(String name) {this.name = name;}public String getName() {return name;}public void setName(String name) {this.name = name;}}
使用示例
package com.xzbd.elDemo;import javax.el.BeanELResolver;
import javax.el.ELContext;
import javax.el.ELResolver;
import javax.el.ExpressionFactory;
import javax.el.StandardELContext;
import javax.el.ValueExpression;/** Author: xzbd* Finished: 2024年1月17日*/
public class ElTest {public static void main(String[] args) {// 创建一个 User 对象User user = new User("XZBD");// 创建 ExpressionFactoryExpressionFactory factory = ExpressionFactory.newInstance();// 创建 ELContextELContext elContext = new StandardELContext(factory);// 创建 EL 解析器(BeanELResolver)ELResolver resolver = new BeanELResolver();// 设置 ELContext 的解析器elContext.setPropertyResolved(ELResolver.class.getName(), resolver);// 在 ElContext 中设置 userValueExpression userValueExpression = factory.createValueExpression(user, User.class);elContext.getVariableMapper().setVariable("user", userValueExpression);// 创建 EL 表达式String expression = "${user.name}";ValueExpression valueExpression = factory.createValueExpression(elContext, expression, String.class);// 评估 EL 表达式并获取结果Object result = valueExpression.getValue(elContext);// 处理结果if (result != null) {System.out.println("Result: " + result);} else {System.out.println("Expression did not evaluate to a value.");}}
}}
代码中的注释解释了EL表达式创建及使用的一般流程。
执行结果
PS D:\z_workspace\elDemo> d:; cd 'd:\z_workspace\elDemo'; & 'D:\apps\Java\jdk-17.0.7\bin\java.exe' '@D:\Users\74511\AppData\Local\Temp\cp_5lkolde1lzvh645orewxyvvup.argfile' 'com.xzbd.elDemo.ElTest'
Result: XZBD