Java EL(Expression Language)是一种用于在Java应用程序中评估和访问数据的强大工具。它提供了一种简洁的语法,允许开发人员轻松地在模板中嵌入动态数据,或者在配置文件中定义属性值。本文将为您介绍Java EL表达式的基本概念和EL表达式属性导航问题。
本文简单介绍 EL 语法,并演示了对象属性访问的一个示例
EL 表达式通常用 ${}
包围,例如 ${user.name}
可以获取用户的名称
${user}
表示引用名为 user
的JavaBean对象。${user.name}
表示访问 user
对象的 name
属性。${user.calculateAge()}
表示调用 user
对象的 calculateAge
方法。在一些 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");
// 创建 ExpressionFactory
ExpressionFactory factory = ExpressionFactory.newInstance();
// 创建 ELContext
ELContext elContext = new StandardELContext(factory);
// 创建 EL 解析器(BeanELResolver)
ELResolver resolver = new BeanELResolver();
// 设置 ELContext 的解析器
elContext.setPropertyResolved(ELResolver.class.getName(), resolver);
// 在 ElContext 中设置 user
ValueExpression 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