JavaServer Faces 表达式语言

另请参见

本主题介绍了 JavaServer Faces 1.1 表达式语言。可以将此表达式语言与 J2EE 1.4 和 J2EE 1.3 项目(使用 JavaServer Faces 1.1 组件)结合使用。如果使用 Java EE 5 项目,则组件是使用统一表达式语言的 JavaServer Faces 1.2 组件。要查看有关该语言的文章,请参见以下 Web 页:

要查看统一表达式语言的完整规范,您必须下载 JavaServer Pages (JSP) 2.1 规范。以下 Web 页讨论了 JSP 技术并提供了下载文件的链接:

本主题适用于那些想要输入其自己的值绑定表达式,而不是使用 IDE 创建这些表达式的高级用户。其中包含以下部分:

简介
JavaServer Faces EL 表达式语法
获取值语义
设置值语义
隐式对象
类型
运算符
保留字

简介

JavaServer Faces 提供了一种在 Web 应用程序页面中使用的表达式语言 (JSF EL),用来访问位于页面 Bean 以及其他与 Web 应用程序关联的 Bean(如会话 Bean 和应用程序 Bean)中的 JavaBeans 组件。在大多数情况下,IDE 都会为您指定正确的表达式,例如,当您将组件的 text 属性绑定到数据提供器或 JavaBean 属性时。

要绑定组件的任何属性,都可以先将组件添加到 Visual Web JSF 页,然后右键单击该组件并选择“属性绑定”。随后可以使用“属性绑定”对话框选择组件的属性,并选择要将组件属性绑定到的 JavaBeans 属性。

作为将组件绑定到数据库表的一个示例,以下代码示例将引用静态文本组件。下面说明了如何生成代码示例:

  1. 将组件面板“基本”类别中的静态文本组件 输出文本图标 拖放到可视设计器中的 Visual Web JSF 页上。
  2. 打开 ,然后将 Travel 数据库中的 Person 表拖放到组件上。

    IDE 会自动将该数据库表的数据提供器对象添加到页面中,并将 text 属性绑定到数据提供器的 PERSON.PERSONID 字段。您会看到该组件的文本变为 123

  3. 右键单击组件,然后选择“绑定到数据”。
  4. 在“绑定到数据”对话框中,选择数据提供器的 PERSON.NAME 字段,然后单击“确定”以更改 text 属性到相应字段的绑定。
  5. 单击页面上方的 JSP 按钮以查看生成的源代码。

JSP 编辑器中的生成代码如下所示:

  <ui:staticText binding="#{Page1.staticText1}" 
   id="staticText1" 
   style="position: absolute; left: 216px; top: 192px" 
   text="#{Page1.personDataProvider.value['PERSON.NAME']}"/>

JavaServer Faces 表达式语言语法使用分隔符 #{},如以下部分所述。JavaServer Faces 表达式既可以是值绑定表达式(用于将 UI 组件或其值绑定到外部数据源中),也可以是方法绑定表达式(用于引用支持 Bean 方法)。该表达式还可以接受混合的类型和计算语法,以及 2.0 表达式语言的运算符。

JavaServer Faces EL 表达式语法

JSF EL 可用于将 JavaBeans 绑定到组件属性,以简化组件从各种源访问数据的方式。JSF EL 表达式使用语法 #{expr};

值绑定表达式的语法与 JavaServer Pages 规范(版本 2.0)2.3 节至 2.9 节中定义的表达式语言表达式的语法类似,但是具有以下不同之处:

除了在分隔符方面存在区别外,这两种表达式类型在以下语义方面也有所不同:

有效的值绑定表达式示例包含:

   #{Page1.name}
   #{Foo.bar}
   #{Foo[bar]}
   #{Foo[“bar”]}
   #{Foo[3]}
   #{Foo[3].bar}
   #{Foo.bar[3]}
   #{Customer.status == ‘VIP’}
   #{(Page1.City.farenheitTemp - 32) * 5 / 9}
   Reporting Period: #{Report.fromDate} to #{Report.toDate}

对于要调用 setValue 方法的值绑定表达式(例如,在更新模型值期间输入字段的 text 属性绑定),其语法被限于使用以下任一格式,其中 expr-a 是用于计算某个对象的常规表达式,value-b 是一个标识符:

   #{expr-a.value-b}
   #{expr-a[value-b]]
   #{value-b}

获取值语义

当调用 ValueBinding 实例的 getValue 方法(例如,在页面呈现期间计算 JSP 标记属性上的表达式),并计算该表达式时,将返回计算的结果,计算方法如下:

设置值语义

在调用 ValueBindingsetValue 方法时(例如,在更新模型值期间输入字段的 text 属性绑定),值绑定语法的限制如上一部分中所述。实现必须执行以下处理才能计算 #{expra.value-b}#{expr-a[value-b]} 格式的表达式:

如果整个表达式包括一个标识符,则会应用以下规则:

隐式对象

表达式语言定义一组隐式对象:

允许访问各种范围的变量的对象:

当表达式按名称引用其中一个对象时,将返回相应的对象。隐式对象比同名属性的优先级要高。例如,即使 facesContext 属性包含一些其他值,#{facesContext} 也将返回 FacesContext 对象。

类型

表达式语言定义了以下类型:

运算符

除了在上述获取值语义及其后面的部分中讨论的 .[] 运算符外,表达式语言还提供以下运算符:

按从高到低,从左到右的顺序排列的运算符优先级如下所示:

保留字

以下单词是为表达式语言而保留的,不能用作标识符:

and false le not
div ge lt null
empty gt mod or
eq instanceof ne true
另请参见
将组件添加到 Visual Web JSF 页
关于将组件绑定到数据
绑定组件属性
关于页面

法律声明