跳转到内容

Java EL表达式

来自代码酷

模板:Note

Java EL表达式[编辑 | 编辑源代码]

表达式语言(Expression Language, EL)是JSP 2.0引入的核心特性,用于简化JSP页面中的数据访问和操作。它提供了一种简洁的语法来访问JavaBean属性、集合元素、隐式对象等,避免了传统JSP脚本(如`<% %>`)的复杂性。

核心特性[编辑 | 编辑源代码]

  • 自动类型转换
  • 空值安全(Null-safe)访问
  • 支持运算符和函数调用
  • 访问作用域变量(request/session/application等)
  • 与JSTL无缝集成

基本语法[编辑 | 编辑源代码]

EL表达式以`${`开始,以`}`结束:

<!-- 访问简单属性 -->
${user.name}

<!-- 访问集合元素 -->
${users[0].email}

<!-- 使用运算符 -->
${age >= 18 ? "成人" : "未成年"}

隐式对象[编辑 | 编辑源代码]

EL提供11个内置隐式对象:

EL隐式对象
对象类型 说明
pageScope page作用域变量
requestScope request作用域变量
sessionScope session作用域变量
applicationScope application作用域变量
param 请求参数(单值)
paramValues 请求参数(多值)
header HTTP请求头
headerValues HTTP请求头(多值)
cookie Cookie值
initParam 上下文初始化参数
pageContext 提供JSP页面上下文访问

详细使用示例[编辑 | 编辑源代码]

属性访问[编辑 | 编辑源代码]

<!-- 假设有JavaBean: com.example.User -->
<jsp:useBean id="user" class="com.example.User" scope="request"/>
${user.name}  <!-- 相当于 user.getName() -->
${user['name']}  <!-- 另一种访问方式 -->

集合操作[编辑 | 编辑源代码]

graph LR A[集合访问] --> B[List] A --> C[Map] B --> D[使用索引: list[0]] C --> E[使用键: map['key']]

<!-- 访问List -->
${userList[0].name}

<!-- 访问Map -->
${countryMap['CN']}

运算符[编辑 | 编辑源代码]

EL支持多种运算符:

{算术运算符+,,*,/,%关系运算符==,!=,<,>,<=,>=逻辑运算符,||,!三元运算符? :empty运算符检查空值或空集合

<!-- 示例 -->
${(x + y) * z}
${empty shoppingCart ? "购物车为空" : "有商品"}

实际应用案例[编辑 | 编辑源代码]

用户登录信息显示[编辑 | 编辑源代码]

<!-- 检查登录状态 -->
<c:if test="${not empty sessionScope.user}">
    欢迎,${sessionScope.user.name}!
    您的权限是:${sessionScope.user.role}
    <c:if test="${sessionScope.user.role == 'ADMIN'}">
        (管理员模式)
    </c:if>
</c:if>

表单处理[编辑 | 编辑源代码]

<!-- 显示表单错误 -->
<div class="error">
    ${param.error == '1' ? '用户名或密码错误' : ''}
</div>

<!-- 记住用户名 -->
<input type="text" name="username" 
       value="${cookie.rememberedUsername.value}"/>

高级特性[编辑 | 编辑源代码]

方法调用[编辑 | 编辑源代码]

从EL 3.0开始支持直接调用方法:

${user.getFullName(true)}  <!-- 传递参数 -->

Lambda表达式[编辑 | 编辑源代码]

EL 3.0引入Lambda支持:

<%-- 计算阶乘 --%>
${factorial = n -> n == 1 ? 1 : n * factorial(n-1); factorial(5)}

常见问题[编辑 | 编辑源代码]

页面模块:Message box/ambox.css没有内容。

  • 页面指令:`<%@ page isELIgnored="false" %>`
  • web.xml配置:
<jsp-config>
    <jsp-property-group>
        <url-pattern>*.jsp</url-pattern>
        <el-ignored>false</el-ignored>
    </jsp-property-group>
</jsp-config>

最佳实践[编辑 | 编辑源代码]

  • 优先使用EL而非Scriptlet
  • 对可能为null的对象使用`empty`检查
  • 复杂逻辑应移至后台处理
  • 避免在EL中编写过长表达式

模板:SeeAlso