使用JavaServerFaces构建ApacheGeronimo应用程序,第1部分

使用 Eclipse 和 Apache MyFaces Core 构建基本的应用程序

开始之前

本教程向 Java 程序员介绍如何使用 JSF 组件来构建具有高度交互性的部署在 Apache Geronimo 上的 Java EE 应用程序。本教程假定 读者使用 Eclipse 集成开发环境(IDE)作为开发平台。

关于本教程

本教程介绍了 Apache Geronimo,它是一个纯 Java EE 应用服务器。还介绍了使用 Eclipse IDE 和 Apache MyFaces(这是一个开放源 码的 JSF 框架实现)的 JSF 编程环境。这里将会开发一个开发者论坛注册页面的前端,并学会如何使用常见的输入方法和数据验证技术。

关于本系列

这是一个关于使用 JSF 构建 Apache Geronimo 应用程序的教程,教程分五部分,这是其中的第 1 部分。在后面的系列教程中包括以下 几个部分:

第 2 部分:在 JavaServer Faces 中使用 Tomahawk 展示了如何在 Geronimo 应用程序中集成 Apache Tomahawk。Tomahawk 提供了几 个定制组件,可跟 JSF 100% 兼容。

第 3 部分:在 JavaServer Faces 中使用 ajax4jsf 演示了如何使用 Sun 的 ajax4jsf 工具使 Geronimo 应用程序获得与 Ajax 的兼 容性。

第 4 部分:使用 ADF Faces 扩展 JSF 教您怎样将 ADF Faces 中的组件集成到 Geronimo 应用程序中。Oracle 的 ADF Faces 是构建 于 JSE 之上的一组非常丰富的 UI 组件。

第 5 部分:将 JSF 应用程序与 Spring 集成 展示了如何将 JSF 应用程序与 Spring 框架集成。Spring 是一个流行的框架,它使 Geronimo 开发者能更容易地构建 Java EE 应用程序。

系统需求

为了学习本教程,需要有下列一些工具:

Geronimo ,Apache 的 Java EE 服务器项目。根据需要,Geronimo 可提供 Tomcat 和 Jetty 两种风格。我们采用的是 Jetty 风格(1.1 版),因 为它小一点。

MyFaces ,Apache 的 JSF 实现。请从 Apache 下载内核版本(不带 Tomcat)。本教程中我们使用的版本是 1.1.3 版。

一个空的 MyFaces Web 应用程序。请从 coreservelets.com 这个Web 站点下载 Marty Hall 的 jsf-blank-myfaces- minimal.zip 归档文件。该归档文件包括一个空的 Web 应用程序,其中含有基本 MyFaces 应用程序所必需的最小的 MyFaces 库,几乎可 以原封不动地转到 Geronimo 上去。是的,两次下载了这些 .jar 文件(一次在这里,一次在 MyFaces 内核归档文件那里),因为仍需要 从 MyFaces 归档文件里获得文档和您可能会感兴趣的其他可选 JAR 文件。

Eclipse,这是一个可支持大量语言和平台的可扩展开放 源码集成开发环境(IDE)。

Eclipse Web 工具平台(WTP) ,它给 Eclipse 添加了对 XML 的支持和对 JSF 的基本支持。

将 Java 1.4 或更新版本 安装到您的系统中。Eclipse 二进制文件中带有它自己的 Java 运行时,但 Geronimo 和 MyFaces 则没有(带运 行时会使下载归档文件的尺寸急剧变大)。在本教程中,我们使用 Mac OS X 10.4 所用的 Java 1.5,但平台应该不是问题。可以从 Sun Microsystems 或 IBM® 处获得 Java 技术的文件。

概述

在创建 Web 应用程序时,Java Servlet 和 JavaServer Pages(JSP)技术提供了一个性能强大的环境,但其中并没有给出创建用户界面(UI)的标准方法。您必须全靠自己来管理 JSP 页面中所 有表单的状态,而且还必须把进来的 HTTP 请求转发给适当的事件处理程序。如果站点的 GUI 很复杂,随应用程序而产生的复杂的基础设 施会变得难以管理。此外,站点还会有些特有的行为以及其他一些细节问题,使得您构建的代码很难被重用。JSF 提供了一种简化高层任务 (例如 UI 组件的排列和重用)的现成工具,并把组件的状态和输入处理跟决定应用程序行为的对象关联了起来。

Apache Geronimo

Apache Geronimo 是一个开放源码的(采用 Apache Software Foundation 许可协议)的 Java EE 服务器,其设计目的是尽可能增强应 用程序的兼容性和性能。它的当前版本(到写本文时为止是 1.1 版)通过了 Sun 的 Java 2 Platform, Enterprise Edition(J2EE)的 Technology Compatibility Kit(TCK)测试,这表示它符合 Sun 的规范,跟 J2EE 服务器完全兼容。

与 Jetty 或 Tomcat Web 服务器打包使用时,Geronimo 非常易于启用和运行,而且它已经部署了一个极其有用的管理界面应用程序。 不需要以任何方式重新启动或重新配置服务器,就可以上载并启动 Web 应用程序。

MyFaces

MyFaces 是第一个免费的开放源码的 JSF Web 应用程序框架实现。JSF 类似于流行的 Struts 框架,实现了模型 – 视图 – 控制器 (MVC)模式,但是它有一些功能是 Struts 没有提供的。JSF 是由 Java Specification Request #127(JSR 127)规范所定义的,它被 Web 应用行业的专家批准成为 Java Community Process(JCP)的规范。

Eclipse

Eclipse 是按照一个可扩展的基于插件的架构而构建的,它是一个开放源码的集成开发环境(IDE)。这样,只要一个 IDE 就能够支持 做任何工作所需的几乎任何语言、任务、平台和数据文件。这样,将可以从 Java 对开发的出色支持和 WTP 项目的插件中获益。WTP 提供 了支持 XML 的编辑器,它还提供了实验性的对 MyFaces 的支持。

我们来很快地看一下我们的应用程序示例。

应用程序示例

在本教程中,将使用 Geronimo 部署一个简单的用 MyFaces 写的 Web 应用程序,它为您创建自己的 Web 应用程序提供了一个很好的开 端。将为一个假想的面向开发者的讨论区论坛构建一个注册过程,可参见本教程末尾的 图 19。

诚然,这不是 Slashdot.org 或是什么可怕的论坛,但这里的东西确实是每个人都熟悉的(这就像注册到某个论坛、邮件列表单或 beta 测试的情况)。

在下一节,您将了解所有需要做的工作,并为这个应用程序创建一个 Eclipse 项目。

创建项目

首先,为使用 MyFaces 的应用程序创建一个准备放到 Geronimo Java EE 服务器上的 Eclipse 项目。这一节将完成所有不需要费力的 工作(创建 Eclipse 项目、进行必要的设置、导出 .war 文件并把它部署到服务器上)。

在 Eclipse 中进行必要的设置

为 Geronimo 服务器创建新的 MyFaces 应用程序时,要做的第一件事就是创建一个 Eclipse 项目。注意,为了继续进行这部分的教程 ,必须先安装好 Eclipse,并通过 Eclipse 的更新管理器安装好 WTP。安装完 Eclipse 后,可到 WTP 的 Web 站点了解如何安装 WTP。

启动 Eclipse,然后从菜单选择 File > New > Project。会弹出一个新项目向导,如 图 1 所示。

图 1. Eclipse 新项目向 导

在 “Web” 处选择 Dynamic Web Project。这样将会创建一个项目,它按下面的结构存放一个 Web 应用程序:

build

classes

src

WebContent

META-INF

MANIFEST.MF

WEB-INF

lib

faces-config.xml

web.xml

除 faces-config.xml 文件外,Web 应用程序开发者应该对 WebContent 文件夹中的文件和目录很熟悉。Java 类的源代码会存到 src 文件夹中,而构建输出文件(例如 .class 文件)会创建在 build 文件夹中。

单击 Next,显示 New Dynamic Web Project 向导(见 图 2) 。

图 2. 创建一个动态 Web 项目

填入项目名称,并从下拉配置列表中选择 Java Server Faces 1.1 Project。创建一个名为 devSignup 的项目。

单击 Next 显示 New Dynamic Web Project 向导的 Project Facets 面板。这里不需要做任何事,所以再次单击 Next 显示 Web Module 面板。

这个面板上的 Context Root 域决定了部署到 Web 服务器上时应用程序目录的名称。默认的目录名与项目名称相同,在这个样例中为 devSignup 。如果不喜欢这样,就改个目录名,然后单击 Next 显示 JSF Capabilities 面板(见 图 3)。在 JSF Capabilities 面板上 可以定义几组在项目中使用的 JSF JAR。为了便于部署,也可以在导出这个 Web 应用程序时让 Eclipse 自动包含这些 JAR。

图 3. 给 项目加入 JSF 兼容性

在面板顶部,选中 Deploy jars to WEB-INF/lib,这是因为创建应用程序时希望包括 JSF 库。

单击这个复选框正下方的 New 按钮,显示 Create JSF Implementation Library 对话框(见 图 4)。这样就可以设置一组在 Web 应 用程序中可以重用的标准 JSF JAR。

图 4. 创建一个 JSF 实现库

给这个库起一个描述性的名字(我起的名字是 MyFaces(Core))。

从 Version Supported 下拉列表中选择 v1_1,因为 Apache MyFaces 支持 1.1 版的 JSF 规范。

单击 Add 按钮,选择要包括在这个库的定义里的 JSF .jar 文件。库中包括的文件列在下面。

commons-beanutils-1.7.0.jar

commons-codec-1.3.jar

commons-collections-3.1.jar

commons-digester-1.6.jar

commons-el-1.0.jar

commons-lang-2.1.jar

commons-logging-1.0.4.jar

jstl-1.1.0.jar

myfaces-api-1.1.3.jar

myfaces-impl-1.1.3.jar

这是在当前的 MyFaces 实现中最精简的一组 JSF 库(有些文档中在这个清单里没有 jstl.jar ,但这是一个必需的文件)。在最小空 应用程序归档文件中,这些 JAR 的副本省略了版本号(而且它带了两个额外的库:commons-validaTor.jar 和 jakarta-oro.jar,它们分 别提供数据验证类和对正则表达式的支持)。

这里需要注意的一点是:在 JSF Implementation 库中将包含对您的 .jar 文件的完全路 径的引用;该库不会把这些文件拷贝到您的工作区里。这样做是有益的,因为您不必为每个项目都生成这些 JAR 文件的一个副本;但另一 方面,这也有坏处,因为这样就不能利用软件配置管理(SCM)系统,甚至也无法通过导出 Eclipse 项目,把这个项目移交给另一个开发者 。

添加完所需的 .jar 文件后,单击 Finish 创建一个 JSF Implementation 库。

已经完成了 New Dynamic Project 向导的设置,所以单击 Finish 创建一个 Web 应用程序骨架。Eclipse 自动转到 Java EE 透视图, 目前这对于您的 JSF 开发没有什么帮助。WTP 中对 JSF 的支持目前是 0.5 版,所以还不能指望会有无缝的集成。

从菜单中选择 Window > Close Perspective ,切回到 Resource 透视图。

在 NavigaTor 视图下把项目展开(见 图 5 ),观察向导创建的目录结构和文件。

图 5. 一个有待开发的新 Web 应用程序

现在就可以把应用程序放到服务器上试试了。

把东西都拼起来

现在已经创建了一个基本的 Web 应用程序,还需要再加一些东西进去,这样才能让它成为一个真正的(基本)Web 应用程序,并使它适 于部署到一个 Geronimo 服务器上。

编辑 web.xml 文件。如果 Eclipse 的 XML 编辑器以设计模式启动(看见底部的选项卡了吗?),单击 Source 选项卡,就可以直接编 辑 XML 文件了。可以将它编辑成类似于 清单 1 所示。

清单 1. 的简单应用程序的 web.xml 文件

    devSignup           index.jsp   

在 标记中,把 id 属性从其默认值(WebApp_ID)改过来;这是在这个服务器上启动 Web 应用程序的 URL。我会采用 devSignup 来代替它。还需要加入 xmlns 声明和 xsi:schemaLocation 声明。

删掉 和 块,并从 部分删掉一些 标 记。 标记定义了显示 Web 应用程序时将使用的文件(按指定的顺序)。例如,默认的清单包括 index.html 、 index.htm、index.jsp 和其他一些文件。去掉除 index.jsp 外的所有文件,然后就要创建一个 index.jsp 文件。

右键单击 WebContent 文件夹,然后从上下文相关菜单选择 New > Other 显示新建文件向导。

展开 Web 组,选择 JSP,然后单击 Next。

将文件名设为 index.jsp,然后单击 Finish 创建新的 index.jsp 文件。

如 清单 2 所示编辑 index.jsp。这是 “ Hello World ”程序,没什么有用的 JSP 或 JSF 交互,所以可以放心不会有什么问题。

清单 2. 人人喜欢的程序,JSP 风格

Developer Signup

Hello, world!

The server's time is ${datetime}.

这还不完全是一个基本的 “ Hello World ”程序,因为用 java.util.Date bean 提供了当前日期和时间。—www.bianceng.cn

这个拼图的最后一块是 Geronimo 的部署描述符。右键单击项目中的 WEB-INF 文件夹,然后从上下文相关菜单中选择 New > Other 。

在新建文件向导里,展开 XML 组,选择 XML,然后单击 Next。

确保选中 Create XML file from scratch,然后单击 Next。

把文件名改为 geronimo-web.xml,然后单击 Finish 创建一个新文件并编辑它。

按 清单 3 所示编辑 geronimo-web.xml。这个基本的 Geronimo 部署文件只是告诉服务器在哪里发布这个 Web 应用程序(与我们在 web.xml 中已做过的很类似)。

清单 3. Geronimo 的部署文件

   /devSignup

在这个示例中,我把 设置为 /devSignup,这样就可以在服务器上的 /devSignup 下看到这个应用程序了。

挺容易,对吧?现在需要把最初的 Web 应用程序导出为一个 .war 文件,并把它部署到服务器上。继续阅读,学习怎么做到这些!

Web 应用程序风格的 “Hello World” 程序

现在已创建了一个项目,一个基本的欢迎页面以及一个 Geronimo 部署描述符,可以创建一个 .war 文件把它部署到服务器上。

在 NavigaTor 视图内右击项目的名字(这里是 devSignup),然后从上下文相关菜单中选择 Export。

在 Export 向导中,展开 Web 组,选择 WAR file ,然后单击 Next 显示 WAR Export 面板(见 图 6)。

图 6. 导出一个 .war 文 件

由于是在导航器中导出项目的,所以 Web 模块已经被正确地选择。单击 Browse 按钮为 .war文件选择一个目的目录和文件名。将它起 名为 devSignup.war 存到桌面上,这样比较容易找到它。然后把它部署到服务器上。

单击 Finish 导出这个 .war 文件。

如果不熟悉一般的 IDE(或只是不熟悉 Eclipse ),您可能不相信它会正确地工作。如果检查 .war 文件的内容,看到的东西应该类似 于 清单 4 所示。

清单 4. .war 文件的内容

./index.jsp./META-INF./META-INF/MANIFEST.MF./WEB-INF./WEB-INF/classes./WEB-INF/faces-config.xml./WEB-INF/geronimo-web.xml./WEB-INF/lib./WEB-INF/lib/commons-beanutils-1.7.0.jar./WEB-INF/lib/commons-codec-1.3.jar./WEB-INF/lib/commons-collections-3.1.jar./WEB-INF/lib/commons-digester-1.6.jar./WEB-INF/lib/commons-el-1.0.jar./WEB-INF/lib/commons-lang-2.1.jar./WEB-INF/lib/commons-logging-1.0.4.jar./WEB-INF/lib/jstl.jar./WEB-INF/lib/myfaces-api.jar./WEB-INF/lib/myfaces-impl.jar./WEB-INF/web.xml

运行您喜欢的 Web 浏览器,并访问 http://localhost:8080/console/(如果 Geronimo 服务器不是在同一台主机上运行,则用您的 Geronimo 服务器主机名代替 localhost )。这样会显示一个 Geronimo 管理控制台登录屏幕(见 图 7)。

图 7. 登录到 Geronimo 管 理控制台

登录以便能访问管理控制台(见 图 8)。请记住默认用户名为 server ,而默认的密码为 manager —— 把它们改过来!

图 8. Geronimo 的管理控制台

XML error: The image is not displayed because the width is greater than the maximum of 500 pixels. Please decrease the image width.

在控制台导航清单里应用程序处单击 Deploy New 显示 Install New Applications 屏幕(见 图 9)。

图 9. 安装一个新的 Web 应 用程序

单击 Archive 域旁边的 Browse 按钮,并浏览到刚创建的 .war 文件。因为已经选中了 Start app after install ,所以单击 Install 来上载这个 .war 文件并启动应用程序。在浏览器把归档文件上载完且 Geronimo 已启动应用程序后,将看到一个成功消息。(见 图 10)。

图 10. 简单的应用程序成功了!

可以通过单击 Web App WARs 复查一下,也可以在 Applications 处的控制台导航清单里这么做,它将会显示一个正在运行的所有 Web 应用程序的清单,如 图 11 所示。

图 11. 当前在 Geronimo 上运行的所有 Web 应用程序

URL 栏显示了服务器上的各个应用程序都是在哪里被发布的(可以单击这里访问这个应用程序)。在 Commands 栏中,可以找到停止或 卸载各个应用程序的链接。

现在已经熟悉了如何使用 Eclipse 在 Geronimo 上部署一个 Web 应用程序,接着可以创建一个示例应用程序了。

创建应用程序

为了学习本教程,将为一个假想的开发者论坛站点创建第一个最简单版本的注册过程。需要收集用户希望采用的屏幕名称、e-mail 地址 和密码。图 12 显示了一个用常规的老式 XHTML 创建的演示性注册 UI,XHTML 文本显示在 清单 5 中。

图 12. 用 XHTML 写的演示性注册应用程序

可以很容易地使用图像、站点导航等来修饰它,但这并不是本教程的重点问题。

清单 5. 演示的 XHTML 文本

Developer Forum SignupDeveloper Forum Signup

Welcome to our forums! Please fill in the following form. to create yourforum account.

   Screen name:            Email:            Password:         Sign up

这个演示全部采用标准的 XHTML ,并演示了如何使用两种不同的输入小窗口部件:文本输入域及密码输入域。

现在可以在 Eclipse 项目中开始写这个应用程序了。

编写界面

由于已经经过了用 XHTML 写演示界面的麻烦步骤,现在应创建一个 CSS 文件和一个 JSP 页面,其中包括在 清单 5 中列出的页面。

在 Eclipse 的 NavigaTor 视图下右键单击 WebContent 文件夹,然后从上下文相关菜单中选择 New > Other。

展开 Web 组,为此页面选择 JSP ,然后单击 Next。

输入 signup.jsp 作为新文件的名字,然后单击 Next。

需要使用 New JSP File(xhtml)模板,所以请确认已选择了它,然后单击 Finish 创建一个几乎是空的新 signup.jsp 文件。

将编码设置改为 UTF-8(这样就可以直接在编辑器里写进特殊字符,而不是用实体把文件弄得乱七八糟),设置 ,然后 把 清单 5 中的 内容添加到文件的 里。</p> <p>编辑应用程序中的 web.xml 文件,将它的 从 index.jsp 改为 signup.jsp。现在,默认情况下用户会看到注册 页面,而不是先前构建的 “Hello World” 示例。</p> <p>在开始把这个表单转化为 JSF 组件之前,应该通过一个 JSF 应用程序了解一点儿关于控制流的知识。用户填写表单并把它提交给服务 器,这个表单从一个 bean 那里接收到数据,并调用指定的动作。处理完数据后,它会返回一个条件(以一个字符串来表示),于是,根据 这个条件用户被转到一个新的 Web 页面。</p> <p>因此,需要创建一个 bean 来存放数据,还需要有些 Java 代码来处理这些数据并返回条件值。条件值到 Web 页面的映射是在 faces- config.xml 文件中进行的,前面在开始这个项目时已看到过 Eclipse 创建这个文件了。</p> <p>现在,让我们回到这段代码。</p> <p>为了把这个 XHTML 文件转化为 JSF 文件,需要在该文件顶部添加 JSF 标记库(见 清单 6)。</p> <p>清单 6. 将 JSF 标记引入 JSP 文件</p> <p><code>You also need to wrap the thing in  tags and convert the form  widgets (the ,  and  tags in the  original XHTML) to JSP components.Listing 7 shows you the entire JSP version.Listing 7. The sign-up form, JSF edition.<title>Developer Forum SignupDeveloper Forum Signup

Welcome to our forums! Please fill in the following form. to create yourforum account.

   Screen name:            Email:            Password:         Sign  up

尽管语法不同,但这里的代码跟原始代码十分类似。还需要为成功和失败的情况创建结果页面。目前会让这部分相当短小,参见 清单 8 和 清单 9。

清单 8. 成功时显示的页面(signup-success.jsp)

Developer Forum Signup - Welcome!Developer Forum Signup

Your application was successful, welcome to our forums!

在真实的应用程序中,可能想提供一个链接把用户重定向到论坛、站点主页面或是其他任何适当位置,而不是让他们就这样挂在那里。

清单 9. 失败时显示的页面(signup-failure.jsp)

Developer Forum Signup - ErrorDeveloper Forum Signup

There was an error processing your application, please try again.

在真实的应用中,可能想告诉用户错在什么地方(例如,重复的屏幕名或 e-mail、过于简单的口令或是当前数据库不在线),如果可能 的话,就让他们更正错误。

使用 Faces 配置编辑器

现在您已知道了 signup.jsp 的动作是什么(由 标记所指定的 “register”)以及结果页面是什么,接着可 以为此页面设置导航规则。

双击项目中的 faces-config.xml 开始配置。这个文件在一个特殊的 JSF 编辑器中打开(参见 图 13)。

阅读所显示的介绍,然后单击 Start 实际进入编辑器。

单击编辑器底部的 Navigation Rule 选项卡,以显示用来配置导航规则的图形工具。

图 13. faces 配置编辑器的介绍

单击 Navigation Rule 选项卡边沿处的 Palette ,显示一个项目面板,可以用它来创建导航规则(参见 图 14)。

图 14. 导航规 则可选项目

在面板上单击 Page,然后在编辑器视图里任意一个地方单击。

用弹出的选择器选择 signup.jsp,按同样的方法再做两次,把 signup-success.jsp 和 signup-failure.jsp 也添加到视图中。

在面板上单击 Link,然后单击 signup.jsp。在移动鼠标的时候,可以看到有一条线从 signup.jsp 连接到光标,单击 signup- success.jsp 创建一个从这个表单到结果页面的链接。同样,把 signup.jsp 链接到 signup-failure.jsp。现在,很可能编辑器看起来会 跟 图 15 类似。

图 15. 将表单连接到结果页面

在面板上单击 Select ,然后选择 Window > Show View > Properties 显示属性视图。

在导航规则编辑器中单击其中一个链接箭头,在属性视图下显示该链接的设置(参见 图 16)。

图 16. signup 到 signup-success 的链接的属性

对这个从 signup 到 success 页面的链接,在 From Outcome 域输入 signup-success;这是注册成功时事件处理程序将会返回的字符 串。把注册失败链接的 From Outcome 域设为 signup-failure。

现在可以保存 faces-config.xml 文件了。如果想确认导航规则编辑器没做错事,可以选 Source 选项卡。在那里每个链接都表示为一 个 块,其中 和 元素显示了 From Outcome 属性和它所链接的页 面。

需要创建一个托管 bean 来存放应用程序的数据。在 Faces 配置编辑器中单击 Managed Bean 选项卡,以显示已有的 Managed Bean 元 素(参见 图 17)。

图 17. Managed Bean 面板

单击 Add 按钮显示新 Managed Bean 向导。

选择 Create a new Java class,然后单击 Next 显示 Java 类面板。

将软件包设置为 devSignup 并把类名设置为 SignupData ,然后单击 Next 显示 Managed Bean 配置面板。

将范围改成 request(这个数据只需要在处理注册请求时存在,而不是在整个用户会话期间存在),创建一个 bean 的骨架。

在项目中展开 src 文件夹,然后在 devSignup 文件夹中打开 SignupData.java。为了获取和设置数据,需要给注册表单添加成员数据 和成员访问函数(参见 清单 10)。

清单 10. 用于处理注册数据的 bean

package devSignup;public class SignupData {   // Properties and Accessors.   private String _screenName = "nobody";   private String _email = "nobody@company.com";   private String _password = "";   public String getScreenName() {     return _screenName;   }   public void setScreenName( String newScreenName ) {     this._screenName = newScreenName;   }   public String getEmail() {     return _email;   }   public void setEmail( String newEmail ) {     this._email = newEmail;   }   // NOTE: THIS IS NOT SECURE, DON'T DO THIS   //    WITH YOUR PASSWORDS!   public String getPassword() {     return _password;   }   public void setPassword( String newPassword ) {     this._password = newPassword;   }   // The registration attempt handler.   public String register() {     if( ( _email == null ) || ( _screenName == null ) ||       ( _password == null ) ) {       // Bad code? lost data?        return "signup-failure";     }     if( ( _email.trim().length() < 3 ) ||       ( _email.indexOf( "@" ) == -1 ) ) {       // Bad email address.       return "signup-failure";     }     if( _password.trim().length() < 8 ) {       // Password too short.       return "signup-failure";     }     return "signup-success";   }} 

每个成员变量都有相应的 get 和 set 方法,它们是从 JSP 调用的。例如,如果屏幕名被改变,则 signupData.setScreenName() 被调 用。这是由 的值 #{signupData.screenName} 所指定的。

当有人单击表单上的 Sign up 按钮时,调用 register() 方法。这个方法还进行了基本的数据有效性验证(不要 把您的密码存在内存 里;这里只是一个示例),这基本上就差不多了。在真实的应用程序中,很可能想为这个人创建一个数据库项;如果这样失败了,它将会返 回 signup-failure,然后提示用户再做尝试。

保存所有的文件,然后单击 Eclipse 工具条上的 Build All 图标(参见 图 18)。bean 应该能不出警告和错误地通过编译。

图 18. Eclipse 的全部编译按钮

快要完成了!

几个琐碎的问题

把项目的 index.jsp 文件改为 。这样,如果用户在 URL 中没有指定页面,将 把他们直接重定向到注册页面。

敏锐的读者可能会注意到:尽管这样把用户重定向到了 signup.faces 文件,但显示的却是 signup.jsp 文件。这是 JSF 库的一个特点 ,也是一个令开发者困惑的根源。只要记住 .faces 将被解读为 .jsp 就可以了。

需要给这个项目的 web.xml 文件中添加一大堆 JSF 和 MyFaces 配置信息。完成后,项目的样子应跟 清单 11 所示的类似。

清单 11. 向 web.xml 添加 JSF 和 MyFaces 的琐碎东西

   devSignup        javax.faces.CONFIG_FILES            /WEB-INF/faces-config.xml                javax.faces.STATE_SAVING_METHOD     client        org.apache.myfaces.ALLOW_JAVASCRIPT     true           org.apache.myfaces.PRETTY_HTML     true        org.apache.myfaces.DETECT_JAVASCRIPT     false           org.apache.myfaces.AUTO_SCROLL     true        org.apache.myfaces.webapp.   StartupServletContextListener           Faces Servlet  javax.faces.webapp.FacesServlet     1           Faces Servlet     *.faces           signup.jsp  

保存所有文件,然后祈祷,因为现在要试运行这个东西了。

在服务器上试运行项目

万事俱备,我们来试航一下!

将该项目导出为一个 .war 文件(如前面 Web 应用程序风格的 “Hello World” 程序 一节所述),并将它导入 Geronimo 服务器(如 同一节所述)。

打开一个 Web 浏览器,然后访问 http://localhost:8080/devSignup/ 查看能否使用。看到的应该类似于 图 19 所示。如果是这样, 您就成功了!

图 19. 应用程序终于运行了!

输入一些数据,然后点击 Submit Query 按钮。根据输入内容的不同,应该可以看到一个成功页面或失败页面。胜利了!

结束语

您已经学会了如何用 Eclipse 来创建和构建一个采用 JSF 标准 MyFaces 实现的 Web 应用程序。还开发了一个简单的 JSF 应用程序并 成功地将它部署到了 Geronimo 服务器上。

原文地址:http://www.ibm.com/developerworks/cn/edu/os-dw-os-ag-jsf1.html

勤奋,它是一块可以吸引到一切美好事物的天然磁石,它比黄金珍贵,

使用JavaServerFaces构建ApacheGeronimo应用程序,第1部分

相关文章:

你感兴趣的文章:

标签云: