【Java】原生 EL 表达式对象属性访问

发布时间:2024年01月18日

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");

        // 创建 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
文章来源:https://blog.csdn.net/m0_47406832/article/details/135669646
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。