JSTL、EL 概述及其在 Oracle ADF 中的用法

作者:Chris Schalk,甲骨文公司
2004 年 7 月

目录

 

引言

JDeveloper 10g 及其应用程序开发框架 (ADF) 完全依靠表达式语言 (EL) 在 Web 客户端中完成数据的表示和格式显示。在 JDeveloper 10g 中使用 EL 非常容易,您既可以从组件模板中拖放 JSTL 标记(该标记使用 EL),也可以简单地从数据控制面板中拖放数据绑定组件(这些组件也使用 EL)。

以下将综述 EL 和 JSTL,并了解如何在 JDeveloper 10g 和 ADF 中使用它们。

什么是表达式语言 (EL)?

简单地说,表达式语言用于简化 Web 开发。EL 不是编程语言,也不是脚本语言,使用它可以方便对 J2EE web 应用程序数据进行访问。EL 提供了运算符以检索和操作 J2EE Web 容器中的应用程序数据,从而提供了一个快捷的 Web 应用程序数据处理方法,使您不必编写大量代码来提取、解释和表示 Web 应用程序中的数据。所有 EL 表达式都包含在字符“${”和“}”中并通常采用 ${object.data} 格式,其中“object”表示置于 J2EE Web 容器的页面、请求、会话或应用程序范围中的任何 Java 对象。

对比以下 EL 示例。

从 JSP 中的 JavaBean 访问数据
没有使用 EL 使用 JSP 1.2 和 JSTL 使用 JSP 2.0
<jsp:useBean id="employee" scope="session" type="com.oracle.Employee" />
<jsp:getProperty name="employee" property="firstName" />
<c:out value="${customer.firstName}" /> ${customer.firstName}
在 JSP 中访问请求数据
没有使用 EL 使用 JSP 1.2 和 JSTL 使用 JSP 2.0

Hello, <%= request.getParameter("name") %>

Hello, <c:out value="${param.name}" /> Hello, ${param.name}

您可以看到,通过对显示应用程序数据所必需的代码数量进行压缩,EL 简化了 Web 应用程序开发。还可以看到,EL 还可以借助 JSTL 在 JSP 1.2 中使用,以及以直接在 JSP 2.0 中使用。(JSP 2.0 可以直接在页面中使用 EL 表达式而不需要 JSP 标记。)

由于在本文发布时,JSP 2.0 技术仍处于试应用阶段,因此本文将主要介绍 JSTL 和 EL,了解如何在 JSP 1.2 中使用 EL。

什么是 JSTL?

JSTL,即 JavaServer Pages 标准标记库,是一个提供常用 Web 开发功能的定制 JSP 标记库的集合。它前身是开放源代码 Apache Jakarta Taglib 项目,而现在则由 Java Community Process (JCP) 组织根据 JSR-52 规范进行管理。JSTL 的主要目标是使 J2EE Web 开发人员不必为常见的 Web 开发过程构建他们自己的专用标记库。例如,JSTL 在其核心标记库中提供了标准迭代程序“foreach”,从而您不必编写一个对 Java 对象中的数据进行迭代操作的定制标记库。如前所述,JSTL 普遍使用表达式语言,这是它的一个最重要的方面,该语言显著简化了 J2EE Web 应用程序数据表示和操作。

JSTL 涉及的常见 Web 开发领域包括:

  • 条件
  • 迭代程序
  • 定义文本格式
  • 数据库访问 (SQL)
  • XML 处理
  • 国际化
  • 访问 URL 资源

JSTL 标记库中的一部分覆盖了这些常见的 Web 开发领域。下面将对 JSTL 1.0 标记库进行划分并提供某些简单示例。

标记库名称 功能 URI 前缀 示例
核心标记库 迭代、条件、数据访问、输出等 http://java.sun.com/jstl/core c

 

<c:forEach items="${states.rows}" var=“state">
State:<c:out value="${state.name}" />
Capital:<c:out value="${state.capital}" />
</c:forEach>

<c:out value="${param.name} />

XML XML 处理 http://java.sun.com/jstl/xml x <x:parse var="a">
格式 国际化 http://java.sun.com/jstl/fmt fmt <fmt:setLocale value="${locale}" />
SQL 数据库访问, 更新 http://java.sun.com/jstl/sql sql <sql:setDataSource
var="example"
driver="oracle.jdbc.driver.OracleDriver"
url="jdbc:oracle:thin:@jdevdemo:1521:ORCL"
user="scott"
password="tiger" />

“Jakarta Taglibs Standard 1.0 标记库”是 JSTL 1.0 (JSR 52) 的实施,可以从 http://jakarta.apache.org/taglibs/doc/standard-1.0-doc/intro.html 下载。

JSTL 1.0 是首个发行版本,它面向 J2EE 1.3/JSP 1.2 容器。 它还集成到 JDeveloper 10g 中。

下个版本是 JSTL 1.1,它面向 J2EE 1.4 容器,可以从 jakarta.apache.org 网站下载它的实施参考示例。JSTL 1.1 还将集成到 JDeveloper 的下个版本中。

下面我们将进一介绍在当前版本的 JDeveloper 10g 中,如何结合使用 JSTL、EL 和 ADF。

在 JDeveloper 10g 中使用 JSTL、EL 和 ADF

新 JDeveloper 10g 的最大特性之一是它的应用程序开发框架 (ADF),它使开发人员能够使用所选择的 J2EE 中间层技术,包括企业 Javabean、Oracle Toplink、Oracle 业务组件和 Web 服务,以连贯和完全可视的方式构建 J2EE 应用程序。Oracle ADF 向会话范围内提供来自任何支持的中间层技术中的数据,EL 可以访问该范围中的数据,并表示它们。这就是 JDeveloper 使用 JSTL 和 EL 来完成 ADF 数据表示的原因。

有关 Oracle ADF 的更多资料,请参阅:

http://www.oracle.com/ocom/groups/public/@otn/documents/webcontent/134806.pdf

或下列网址中提供的其他 ADF 相关文档:

http://www.oracle.com/technetwork/developer-tools/jdev/overview/index.html

在介绍 ADF 示例之前,我们先了解如何在 JSP 示例中使用面板中的基本 JSTL。

使用 JDeveloper 10g 进行基本 JSTL 开发

首先,我们将介绍如何使用 JSTL“out”标记显示请求参数的当前值。创建一个 JSP(File->New->Web-Tier->JavaServer Pages->JSP)后,选择 Component Palette 页:“JSTL Core”,然后将“out”标记拖放到该页上。

放下该标记时,将显示一个属性对话框。(放下含必填属性的标记时,该对话框将自动显示。)显示该对话框后,您可以在“value”属性中输入一个 EL 表达式。注意,当您开始键入 EL 表达式的开头时,标记编辑器将提供代码提示功能。

为显示请求参数,我们选择“param”对象,然后使用 ${param .name} 完成该表达式。(我们要使用的请求参数是“name”。)

注意 out 标记是如何在 JSP 可视编辑器中显示“value”属性值的。

现在,如果运行该页,并将“ ?name= yourname ”添加到 url 字符串中,则将看到返回的值。

要获取全套的 JSTL 演示,可以查看 JSTL 参考实施实例全集中的 JSTL“标准示例”,方法是从 standard-examples.war 文件中创建一个新项目(File->New->General->Projects-> Project from War file)。标准示例包含迭代程序、条件、xml、格式等的示例。


JDeveloper 10g 中的 JSTL、EL 和 ADF

我们已经了解了 EL、JSTL 以及它们在 JDeveloper 10g 中的使用,下面我们将了解 ADF 如何在数据绑定 ADF Web 应用程序中使用 EL(和 JSTL)。

首先,我们将创建一个新应用程序工作区...

在 Model.jpr 项目中,我们将使用标准 emp 和 dept 表构建简单的业务组件中间层。(保存和编译模型项目。)

在 View-Controller 项目中创建一个空白 JSP。当在可视化编辑器中显示 JSP 时,注意 ADF 数据控制面板将显示在右侧。从该窗口中可以将数据绑定组件拖放到该页中。

注意,数据控制面板包含一个项目树(表示中间层数据)以及一个的下拉列表,下拉列表提供一组“拖放为”选项。下面,我们将使用默认设置“只读表”并将“EmpView1”拖放到 JSP 页中。

注意生成的代码:

对.. 它是包含 EL 表达式的 JSTL。生成的代码是“Foreach”迭代程序以及用于表示该数据的“out”标记。由于 ADF 使得 EL 访问使用所有中间层数据,因此实现页面与 ADF 数据的绑定非常容易。


注意,我们还可以将数据控制面板中的单个值拖放到页面上。

这将插入一个包含针对 Ename 的表达式的“out”标记。

除使用数据控制面板以外,还可以使用 JSTL 手动对页面进行数据绑定。在该示例中,我们首先拖动组件面板中的另一个“out”标记,然后再次通过标记编辑器对话框对它进行数据绑定。注意,这次它可以识别在应用程序中的 ADF 数据。

对 HTML 标记进行数据绑定

您可能会吃惊地发现,使用 JSTL 和 EL 甚至可以对 HTML 标记的属性进行数据绑定。下面是一个使用 JSTL 和 EL 对 HTML 输入字段进行数据绑定的示例。

首先,我们将 HTML 的“文本域”拖动到 JSP 页上。

然后,单击输入域并在属性检查器中找到 value 属性。默认值为空,但注意,如果单击属性检查器工具栏上的  按钮,您将能够将值属性和 JSTL out 标记中包含的 EL 表达式进行绑定。

注意值属性的文本输入域右侧的  按钮。单击它对值属性进行数据绑定。这将再次显示数据绑定对话框,从该对话框中可以选择普通的 JSP 数据或 ADF 数据。

下面是最终显示的数据绑定页。注意,使用 JSTL 和 EL 数据,HTML 输入域还和 ADF 数据进行了绑定。

UIX 如何使用 EL 和 ADF

最终,以上的示例均使用 JSP 和 JSTL。如果使用 UIX 作为用户界面技术,则也可以使用 EL 对应用程序进行数据绑定。

下面,我们将一个只读表拖动到空 UIX 页上,了解如何在其中使用 EL。

注意,本示例中使用了 UIX 对象,但 EL 仍是数据的表示机制。您可以进一步尝试结合使用 EL 和 UIX 。您将发现,属性检查器的使用与在 JSP 文件中使用属性检查器进行标记属性绑定的方法一样。

总结

本文档介绍了表达式语言的概念以及 JavaServer Pages Standard Tag Library 如何使用 EL 来表示和操作数据。它还说明了如何使用 EL 和 JSTL 来完成 JSP 页的数据绑定,使用数据控制面板将 现成的组件拖动到页面,或使用属性检查器和 EL 数据绑定程序对话框手动进行数据绑定。

关于 JSTL 的进一步的信息,请参考:

有关 ADF 和 JDeveloper 10g 的更多信息,请参阅:

 

Left Curve
热门下载
Right Curve