"这篇文档主要介绍了EL表达式的基本语法,包括评估表达式(eval-expression)、字面量表达式(literal-expression)以及组合表达式(Composite expressions)。它详细讲解了EL表达式的两种形式 `${expr}` 和 `#{expr}` 的区别,以及它们在J2EE层面上的计算时机。文档还提到了取值表达式和方法表达式的概念,并通过实例展示了如何在HTML和JSF组件中使用EL表达式进行数据绑定和方法调用。"
EL(Expression Language)表达式是一种强大的模板语言,常用于JSP和JavaServer Faces(JSF)应用中,用于访问和操作JavaBeans或其他数据源中的属性和方法。EL表达式有两种基本形式:评估表达式和字面量表达式。
1.1.1 评估表达式(Eval-Expression)
评估表达式通常以`${expr}`或`#{expr}`的形式出现。两者在解析和计算上是相同的,但根据J2EE层的规范,它们的计算时机不同。`${expr}`在JSP页面编译时计算,称为直接计算;而`#{expr}`在实际需要时计算,称为延迟计算,如在JSF的视图渲染或事件处理阶段。
1.1.1.1 取值表达式
当评估表达式解析为取值表达式时,它可以表示左值和右值。右值是等号右侧的表达式,例如在HTML输入字段中设置`value`属性的示例:
```html
<input type="text" value="${customer.name}" />
```
这里的`${customer.name}`就是取值表达式的右值,它将获取`customer`对象的`name`属性值。
在JSF中,`#{expr}`形式的评估表达式常用于数据绑定,如在`h:inputText`组件中:
```html
<h:inputText id="email" value="#{checkOutFormBean.email}" size="25" maxlength="125" validator="#{checkOutFormBean.validateEmail}" />
```
这里的`#{checkOutFormBean.email}`是取值表达式,它将`checkOutFormBean`的`email`属性与输入框的值关联。
1. 方法表达式
EL表达式还可以用来调用对象的方法,例如`#{expr}`形式可以用于JSF验证器:
```html
<h:inputText ... validator="#{checkOutFormBean.validateEmail}" />
```
这里`#{checkOutFormBean.validateEmail}`就是一个方法表达式,它会在表单提交时调用`checkOutFormBean`的`validateEmail`方法。
EL表达式支持组合表达式,即多个表达式可以组合在一起,提供更复杂的逻辑操作。通过这些基本元素,开发者可以构建出强大的动态视图和控制逻辑,实现数据的便捷访问和处理。