JavaServerFaces简介.doc_第1页
JavaServerFaces简介.doc_第2页
JavaServerFaces简介.doc_第3页
JavaServerFaces简介.doc_第4页
JavaServerFaces简介.doc_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

JavaServerFaces1.0Framework使您可轻松创建强大和动态的Web应用程序。市场上有许多可用的Web用界面框架,但是JavaServerFacesTechnology由于以下几种原因而脱颖而出:它是一个JavaCommunityProcess标准;它为WebUI编程引入了JavaBeans组件范例;并且它的构建采用了许多已有架构的优点。作为一个标准,许多工具供应商可以受益于严格定义且一致的行为。JavaServerFacesTechnology的设计理念是一开始就在工具内部使用。用户也可以受益于不同JavaServerFaces技术实现之间的一致且明确的行为。在JavaServerFacesTechnology中提供了很多有用的特性。需要着重介绍的一些主要功能包括:ManagedBean工具验证工具丰富且可扩展的组件库插入式呈现工具包对具体用户事件响应的导航跨请求保留应用程序状态转换模型本文将简要介绍JavaServerFacesTechnology的这些功能并且给出一些例子。关于这些功能的详细信息和JavaServerFacesTechnology提供的其他功能,请参考J2EE指南的JavaServerFacesTechnology的相关章节(第1721章)。JavaServerFaces应用程序实质上是一个运行在一个与Java(TM)2Platform,EntERPriseEdition(J2EE(TM)platform)兼容的容器中的Servlet或者JavaServerPages(JSP)应用程序。这说明它需要JavaServlet2.3和JSP1.2或者更新的版本。开始创建和配置一个JavaServerFaces应用程序的最好的方法是免费下载Java2SoftwareDevelopmentKit,StandardEdition(J2SESDK)1.4或者更高版本。需要指出的是,JavaServerFacesTechnology不要求在应用程序中使用JSP页面,您可以自由选择直接使用Servlets或者其他模板技术。如果确实对JSP容器使用了JavaServerFacesTechnology,您将通过JavaServerFaces的客户组件标签从内建的JavaServerFaces内核和HTML组件库中受益。JavaServerFaces组件代表像文本字段、表单、按钮、表格、复选框等的Web控件。使用JavaServerFacesTechnology创建一个JSP页面时,在服务器的内存中会建立一个组件树,每一个组件标签对应树中的一个UIComponent实例。该框架使用组件树来处理应用程序的请求并且创建一个呈现出的响应。当用户生成一个事件时,例如,点击了一个按钮,JavaServerFaces生命周期即处理该事件并且产生适当的响应。这是一个对大多数图形用户界面编程的表单而言而常见的一种的范例(paradigm)。FacesServlet是进入JavaServerFaces框架的入口点。它处理请求处理生命周期并且用作一个前端控制器。JavaServerFacesTechnology也有保存重要请求信息的上下文的概念。上下文对象被称为FacesContext。在JavaServerFacesTechnology生命周期的每个阶段上下文对象都被修改并且每次请求时都是有效的。JavaServerFacesTechnology框架也有“值绑定”和“方法绑定表达式”的概念。如果熟悉了像JSPStandardTagLibrary(JSTL)或者JSP2.0这样的技术,您就已经熟悉了表达式语言的概念。JavaServerFacesTechnology绑定表达式使您可以容易地和底层数据模型交互。CharacterCombat演示应用程序举例说明了如何使用“值绑定”从数据模型中提取值。简单的JavaServerFacesTechnology应用程序本文包含一个简单的JavaServerFaces应用程序,它阐明了JavaServerFacesTechnology的一些重要概念。为了理解该应用程序,您应该已经熟悉了包括JSP、Servlets和标签库在内的基本的J2EEWeb技术。示例应用程序后的基本想法是让用户参加一个快速有趣的游戏。您是否想知道如果从指环王中取两个人物并使它们互相打斗会发生什么?示例应用程序以一种简单有趣的方式回答了这个问题。该应用程序的名称是CharacterCombat。CharacterCombat的组成如下:JSP页面,带有表示UI的JavaServerFaces组件容纳模型数据的backingbean应用程序配置文件指定:JavaServerFacesControllerServletManagedBean导航处理上图显示了CharacterCombat演示应用程序中的页面流:在首页面,用户可以进行如下操作:添加更多字符直接转到下一页面在第二页面,用户可以进行如下操作:返回到首页面并添加更多字符选定战斗的第一个参与者转到第三页面在第三页面,用户可以进行如下操作:返回到第二页面选定战斗的第二个参与者转到尾页面在尾页面,用户可以进行如下操作:查看战斗结果返回到第三页面重新开始演示应用程序您将注意到该工作流程符合“向导”UI设计模式。我们已经将本例的向导功能提取到一个您自己的应用程序的一个简单bean中。运行应用程序最新的JavaServerFacesTechnology1.0Framework和其他所有运行时用到的附属程序已经集成到SunJavaSystemApplicationServerPlatformEdtion8中。您不需要在ApplicationServer中进行任何额外的配置步骤来设置一个JavaServerFacesweb应用程序。ApplicationServer是免费的,它包含了J2EE技术最新的实现。如果您下载了J2EE1.4SDK,其中已经包含了ApplicationServer。如果编写自己的JavaServerFacesweb应用程序,要使用JavaServerFacesTechnology1.0框架,唯一需要您在应用程序服务器中做的事情是指定FacesServlet实例并映射您的Web应用程序的部署描述符。所有附属文件已经是容器的一部分,您不需要绑定任何额外的JAR文件。要运行本文中讨论的示例程序,只需要简单地将所提供的配置war文件部署在应用程序服务器中就可以了。通过使用上下文名称“jsf-characterCombat”就可以使用应用程序。除了一个预先构建的war文件,还提供了演示源代码。在与源代码一起发行的README中您将找到如何配置和构建的指示。通过遵照上的关于新建javaserverfaces项目的FAQ中的指示,可以访问本演示的源代码:/faq.html#Code_checkout。一旦遵照了这些指示,就可以在下述地址浏览本文的源代码:/source/br . ources/jsf-demo/characterCombat/演示应用程序构建模块部署描述符为了在Web应用程序中使用JavaServerFaces框架,需要在部署描述符中定义FacesServlet和一个FacesServlet映射。下面是一个例子:FacesServletjavax.faces.webapp.FacesServlet1FacesServlet*.facesFacesServlet实例作为JavaServerFacesTechnology框架中的一个前端控制器。它处理所有与JavaServerFacesTechnology相关的请求。在上面的例子中使用了扩展名映射。使用扩展名映射,Web容器会将所有请求发送到FacesServlet,以获取扩展名如“*.faces”的页面。您也可以使用前缀映射来映射到FacesServlet实例。例如,您可以使所有名字以“/faces/*”为前缀的Web页面通过FacesServlet实例。应用程序配置所有JavaServerFacesTechnology的具体配置信息都将进入像faces-config.XML这样的应用程序配置文件中。在配置文件中可以定义ManagedBean、NavigationRule、Converter和Validator等。下面是配置文件中的一个条目的例子:modelBeancharacterCombat.ModelBeansession该条目在一个bean名称和类之间创建了一个映射。该映射由ManagedBean创建工具使用。“modelBean”第一次被引用时,将创建模型对象并将它保存到适当的作用域中。本文的后面讨论了ModelBeanbean。还有更多的配置选项,在JavaServerFacesTechnology1.0规范您可以找到完整的配置选项集。构建应用程序在演示源代码发布中包含了一个预构建的war文件。您可以在Web容器中部署该war文件。注意该war文件包含了一个JSTL1.1实现。如果您的Web容器不支持JSTL1.1,那么您需要用一个JSTL1.0实现重新构建war文件。如果希望自己构建演示应用程序,您需要遵循如下步骤:在试图建立演示应用程序之前,确保拥有所有的编译时附属文件。演示应用程序提供了一个“perties.sample”文件。复制该文件并将其重新命名为“perties”并且进行更改使之适合您的环境。如果您正在使用ApplicationServerortheJ2EE1.4SDK,JavaServerFacesTechnology1.0Framework和运行一个JavaServerFaces应用程序的所需的全部附属文件已经是您的环境的一部分了。唯一需要做的事情是在您的“perties”文件中修改SJSASPE8.0安装位置。CharacterCombat演示应用程序提供了一个“build.xml”文件。该文件包含了一组建立演示应用程序web档案的规则和目标。要构建应用程序您还需要Ant。Ant已经是SJSASPE8.0发行的一部分,它位于/bin/asant中。要使用SJSASPE8.0容器来建立演示应用程序,只需要在您的解包的CharacterCombatdemo目录中调用“asant”,您的“build.xml”和定制的“perties”文件也在这个目录中。CharacterCombat演示应用程序架构ManagedBeanManagedBean只是具有一个public无参数构造函数的类,这与JavaBeans1.0的方法命名约定是一致的,并且和使用ManagedBean工具的Faces应用程序也是一样的。ManagedBean工具在WEB-INF/faces-config.xml文件中进行配置。在该文件中您可以放置任何数量的声明,每个声明包含一个名字、一个类和作用域。在Web应用程序自身中,您可以使用在JavaServerFacesExpressionLanguage表达式中定义的Bean名称来引用bean。您第一次引用bean时,它将被创建并放置在适当的作用域中。ManagedBean是非常灵活的,它允许您通过指定属性来定制自己的bean,这些属性包括Java数组、映射、列表和其他ManagedBean。CharacterCombat实例有一个名为ModelBean的backingbean。下面是使用ManagedBean工具在WEB-INF/faces-config.xml文件中定义ModelBeanbean的方法:modelBeancharacterCombat.ModelBeansession那个bean后来在Web应用程序的JSP页面中被引用。下面是一个如何使用bean的例子:其中是一个嵌套在表单中的文本字段组件。当表单被提交时,文本字段中的值将作为“customName”属性保存在ModelBean中。“”和“”指定使用一个“值绑定”表达式。该值绑定表达式告诉框架“customNameThe”是一个JavaBean属性,它在“modelBean”关键字下的ModelData中定义。根据WEB-INF/faces-config.xml配置文件,框架的ManagedBean工具知道了类映射的bean名,并且如果bean不存在就初始化该bean。对象模型CharacterCombat例子创建了一个ModelBean对象。与其他JavaBeans组件一样,ModelBean包含了一组访问方法。它也预置了一个默认的字符表,同时也存储用户定制的字符。ModelBean是使用ManagedBean创建工具创建的,并且由在视图中定义的JavaServerFaces组件通过名字引用。ModelBean说明了如何使用bean来保存组件的值。在本例中只支持添加新字符。通过更改模型和视图来支持该功能,对程序的良好扩展可以支持删除功能。JSP页面JSP页面为Web应用程序提供UI。JavaServerFacesTechnology提供两个JSP标签库,它们将组件展现给页面的作者。您可以定制这些组件或者创建自己的组件。标准组件作为基本HTML4.01组件呈现,使得JavaScript绝对最小。这确保您的页面在所有的浏览器中按期望的样子显示。如果您需要对其他呈现类型(如WML或SVG等)的支持,JavaServerFacesTechnology包含了一个RenderKit的概念,它是一个软件模块,组件使用它可以将自己呈现到特定的客户设备类型中。要使用包含组件的内建JavaServerFaces标签库,您需要在JSP页面中包含下面的指令:注意您的JavaServerFaces页面需要所有的JavaServerFaces标签包含在.标签间,从而可以正确的建立组件树。每一个HTML组件都可以使用样式表来定制。您可以指定一个一般的styleClass或者为组件设置特定的样式属性值。下面是一些用来说明上面的概念的CharacterCombat应用程序中的一些例子,:DataTableDataTableUIComponent可以处理几种不同类型的数据模型,其中包括java.util.List和java.sql.ResultSet。它提取数据并将数据显示在一个可定制的表格中。该组件也可以使用样式表来定制。在CharacterCombat演示应用程序中,使用List作为底层数据模型。下面是一个代码片断:.正如您在本例中所见到的,根据在标签中的定义,#modelBean.dataList对保存在“character”变量中的字符条目列表进行求值。对于列表中的每个字符都创建一个新行并且根据相应的tags标签进行显示。标签在包含在facet中的组件和它的父组件之间创建了一种特殊的关系。这种特殊关系使您可定义组件为标题或者页脚。在我们的例子中,我们使用facet来为列创建标题。既然是一个HTML组件,它的样式就可以使用样式表来定制。在我们的例子中,我们为您展示如何为几种不同的属性使用样式特性。我们在JSP页面标题中使用下面的代码片断来导入名为“stylesheet.css”的样式表:linkrel=stylesheettype=text/csshref=下面是呈现的HTMLHereDataTable的样子:PanelGrid对于简单的表格布局您可以使用组件。不像DataTable组件,PanelGrid不接受任何底层数据模型。下面是一个两列的表格的例子。在第一行定义了一个标题。第二行的第一列包含一个InputText字段,第二列包含了一个列表的下拉选项:InputTextInputText组件是一种用来得到用户提交的信息的方法。在我们的例子中,我们通过如下指定值属性将文本字段和模型连接起来:InputText嵌套在一个表单中。一旦表单被提交,字段中的值就会映射到我们的模型中。在下面的图像中,您可以看到PanelGrid布局组件中的一个InputText、一个CommandButtons集合和一个ListBox的组合:OutputTextOutputText组件可以以不同的方式显示信息。例如,您可以将它配置为跳过HTML标签,更改所有尖括号的显示为适当的<语法或者无更改地直接传递标签。您也可以对该组件使用各种样式表。在整个示例应用程序中都使用了OutputText来显示来自模型的数据。在本例中我们显示了字符的名字:SelectOneRadio您可以使用SelectOneRadio来显示一个单选按钮选择集合。您可以包含一组单选选项和嵌套的选项组。下面是在我们的例子中使用SelectOneRadio的方法:Layout属性告诉组件垂直布局而不是默认的水平布局。我们的ModelBean“charactersToSelect”方法返回一个SelectItems的列表,SelectOneRadio知道如何显示它们。该单选组件嵌套在一个表单中。当表单被提交时,选中的单选项就会保存在模型的“currentSelection”属性中。CommandButtonCommandButton是一个输入组件,它可以创建ActionEvent(动作事件)。您可以创建动作监听器来监听用户在浏览您的JavaServerFacesweb应用程序时的特定的事件。您也可以为一个应用程序动作提供一个动作方法绑定,当选中组件时激活它。本例中我们使用了后者:在下一节我们将讨论动作,因为它们在导航处理中是非常重要的。下面说明如何提交RadioButtons集合和CommandButton向导:导航:示例向导组件让我们看一下该应用程序中处理导航的向导组件。该组件有三个部分,下图中用黑体显示它们。要使用该组件用户必须做两件事情:在Web应用程序UI中包含该组件创造相应的导航规则下面我们详细介绍这些步骤。WizardButtonsManagedBean的细节超出了本文的讨论范围,但是基本上讲,它有一些方法可根据用户在向导页面流程中的当前位置来启用或禁用next和back按钮。在UI中包含按钮通过机制可以在应用程序UI中包含组件。在示例应用程序的每个页面中,您都会在底部看到下面的代码行:看一下该页面,我们看到它有下面的标签:f:subviewid=wiz . bsp;h:commandButtonvalue=值得注意的是任何位于被包含页面中的JavaServerFaces组件必须是标签的子组件,正如在父页面中它们必须是标签的子页面一样。本例并没有展示这一点,但是您想包含在子视图中的任何模板标签文本都必须预先包装在标签内部。您可以看到该页面只有一个PanelGrid,它显示了两个相邻的按钮。这些按钮的属性被绑定到WizardButtonsbean提供的方法和属性上。这些按钮和该bean被设计成协同工作。后退按钮有自己的值并且进行了动作硬编码。下一个按钮从WizardButtonsbean提取值并且进行了动作硬编码。导航规则导航规则是向导组件的核心。这些规则必须包含在应用程序的faces-config.xml文件中。下面是演示应用程序规则的一个子集。您可以使用这些规则作为起点来在您自己的应用程序中利用向导组件。/main.jspIftheactionreturnsnext,gotofirstSelection.jspnext/firstSelection.jsp/firstSelection.jspIftheactionreturnsnext,gotosecondSelection.jspnext/secondSelection.jspIftheactionreturnsback,gotomain.jspback/main.jsp导航规则描述了如何根据动作的调用位置来处理动作,如下所示:如果动作在“main.jsp”页面调用并返回“next”,则导航处理程序呈现“firstSelection.jsp”页面如果动作在“firstSelection.jsp”页面调用并且返回“back”,则我们转到主页面如果调用的动作返回“next”,我们将转到“secondSelection.jsp”页面动作您可以回想到在工作流程图中首页面是特殊的,因为工作流程可以使得该页面重新加载。当用户希望向字符表中添加字符时就会重新加载首页面。这一添加是通过在页面中放置一个按钮来实现的,在按钮被按下时引发相应的动作。在“main.jsp”页面中,您可以看到该按钮的声明:实际的动作处理程序的实现在ModelBean.java文件中。“addCustomName”方法将name添加到表格中。publicvoidaddCustomName(ActionEventevent)throwsAbortProcessingExceptionif(customName!=null)&(!customName.trim

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论