JavaServer Face为Java应用程序的开发提速。解析

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

利用JSF应对应用程序开发的未来

作者 Budi Kurniawan

JavaServer Face为Java应用程序的开发提速。

JavaServer Faces(JSF)是一项使用Java技术来快速构建Web应用程序的新技术。JSF通过提供以下特性来加速开发进程:标准和可扩展的用户界面组件;极易配置的页面导航;用于输入验证的组件;自动化的Bean管理;事件处理;轻松的错误处理,以及内置的对国际化的支持。

本文介绍如何使用JSF来构建在线比萨(pizza)订购系统。

项目描述

该应用程序被称之为PizzaRia,是一个在线商店,允许用户选择比萨饼并递交选定的比萨饼。PizzaRia与其他在线商店类似,用户可以浏览菜单,向购物车中添加所选产品并进行结账。

该应用程序的用户界面由5个JSP文件组成,它们是index.jsp, details.jsp, shoppingCart.jsp, checkOut.jsp以及order.jsp 。每个用户界面的页面包括3个其它页面:header.jsp, menu.jsp和 footer.jsp 。

数据库

该程序的数据存储在3张表中:products(产品)、orders(定单)和OrderDetails (订单详细项目)。Products表存储产品信息,具有4列:ProductId(产品标识), Name(名称), Description(说明)和 Price(价格)。

Orders表中的每一行存储一个单独的订单,其中的信息包括联系人姓名、送货地址以及信用卡细目。Orders表有6列:OrderId(定单标识), ContactName (联系人姓名), DeliveryAddress(送货地址), CCName(信用卡所属人姓名), CCNumber(信用卡号码)和 CCExpiryDate(信用卡有效期限)。

每个订单的详细项目被存储在OrderDetails表中。OrderDetails表有4列:OrderId(定单标识), ProductId(产品标识), Quantity(数量)和 Price (价格)。Orders与OrderDetails表通过OrderID列有一对多的对应关系。请注意,OrderDetails表在用户下订单的时候就保存相关的价格信息。该价格可能与当前产品价格不同,后者存储在Products表的Price列中。

用于在一个Oracle数据库中创建所需的表的脚本文件pizzaria-oracle.sql存放在pizzaria.zip文件中。

业务对象

以下是在该应用程序中使用的业务对象:

ProductBean用于封装一个产品信息。它具有如下属性:id(标识)、name(名称)、description(说明)和price(价格)。每次details.asp页被访问的时候,JSF实现(implementation)就会自动创建一个ProductBean实例。该JSF 实现调用ProductBean的无参数构造器,从数据库中获取相关的数据,并且将其填入相应的字列中。

ProductSummary。ProductSummary(产品概要)用于表示产品的概要。该类包含2个属性:id(标识)和name(名称)。

ShoppingItemBean。ShoppingItemBean用于表示购物项目。该类包含4个属性:productId(产品标识), productName(产品名称), price(价格)以及 quantity (数量)。

ShoppingCartBean。ShoppingCartBean用于表示一个存储在对话(session)对象中的购物车。该类允许用户添加购物项目(使用addShopping方法),获取包含所有购物项目的列表(使用getShoppingItems方法),获得所购货物的总价值(使用getTotal方法)。

OrderBean。OrderBean表示一个订单。该类具有如下5个属性:contactName, deliveryAddress, creditCardName, creditCardNumber以及creditCardExpiryDate。

MenuBean。MenuBean使用getMenu方法显示可供产品的目录。该方法返回一个包含到产品细节的链接的HTML表。

DatabaseUtil。DatabaseUtil提供了以下3种方法以便访问和操作数据:∙GetProductSummaries:该方法返回一个包含了产品表中所有产品概要的列表。一个产品概要通过ProductSummary类来表示。

∙GetProductDetails:该方法返回一个ProductBean对象,该对象封装具有特定标识符的产品细节。

∙InsertOrder:该方法向Orders表和OrderDetails表插入客户订单。

应用程序上下文监听器

应用程序上下文监听器(AppContextListener类)从web.xml文件读出用于访问数据库的初始参数,然后将其写入ServletContext对象。用到的初始参数如下:jdbcDriver, dbUrl, dbUserName和 dbPassword。在你的web.xml文件中编辑这些值,以便反应你数据库的真实值。

JSF应用程序配置

JSF允许编程人员仅仅通过应用程序配置文件就可以轻松配置应用程序。该文件如果存在的话,则它应该被命名为faces-config.xml,并且应该位于你应用程序下的WEB-INF 目录。

可以在faces-config.xmlz文件中对该应用程序的多个方面进行配置,包括bean 管理、页面导航、定制UI(用户界面)组件、定制验证程序和消息资源。在PizzaRia 应用程序中,我将该faces-config.xml用于bean管理和页面导航的配置。

JavaBean管理。对于JavaBean管理,可以使用应用程序配置文件

faces-config.xml中的managed-bean元件。每个managed-bean元件都会注册一个JavaBean--JSF会将该JavaBean在特定的作用域内实例化和进行储存。managed-bean元件定义如下:

name, managed-bean-class, managed-bean-scope, (managed-property* | map-entries |

list-entries))>

每个managed-bean元件都必须包含一个managed-bean-name元件,一个managed-bean-class元件,以及一个managed-bean-scope元件,并且可选择性地包含一些描述、显示名、图标和

managed-property/map-entries/list-entries元件。

managed-bean-name指定了被用来在整个应用程序中引用该JavaBean的名称。managed-bean-class元件包含该JavaBean的完全限度的类名。

managed-bean-scope元件定义该JavaBean的作用域。该元件可能的值是:application、session、request或者none。如果managed-bean-scope元件是none以外的其他值,那么,所创建的该JavaBean元件将会被存储在相应的对象中。比如说,如果值是"session",那么,该JavaBean就会被存储在一个给定用户的session对象中。

在PizzaRia应用程序中,我注册了如代码清单1所示的4个JavaBeans。

页面导航:页面导航决定了Web应用程序的控制流。本节演示如何在JSF中创立一个页面导航。

JSF使用navigation-rule元件来为页面导航定义规则。其定义如下:

(description*, display-name*, icon*, from-view-id?,

navigation-case*)>

from-view-id元件是首页(起始页)的标识符。为了说明被称之为index.jsp 的JSP页面的导航规则,下面给出子元件from-view-id的值:

/index.jsp

相关文档
最新文档