JavaServerFaces技术.ppt

上传人:wuy****n92 文档编号:70793193 上传时间:2023-01-28 格式:PPT 页数:24 大小:261.49KB
返回 下载 相关 举报
JavaServerFaces技术.ppt_第1页
第1页 / 共24页
JavaServerFaces技术.ppt_第2页
第2页 / 共24页
点击查看更多>>
资源描述

《JavaServerFaces技术.ppt》由会员分享,可在线阅读,更多相关《JavaServerFaces技术.ppt(24页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、第七章 JavaServer Faces技术本章目录uuJSFJSF概述概述uuJSFJSF表达式语言与标签表达式语言与标签uuJSFJSF数据传递方法数据传递方法uu数据类型转换与验证数据类型转换与验证uu消息处理与国际化支持消息处理与国际化支持uuJSFJSF生命周期与事件处理生命周期与事件处理7.1 JSF概述uu什么是什么是JSFJSF JSF JSF是一种用于构建是一种用于构建 Web Web 应用程序的新标准应用程序的新标准JavaJava框架。框架。它提供了一种以组件为中心来开发它提供了一种以组件为中心来开发Java WebJava Web用户界面用户界面的方法,从而简化了开发。

2、的方法,从而简化了开发。JSFJSF为为JAVAJAVA的的 Web Web应用开应用开发人员提供了标准的编程接口、丰富可扩展的发人员提供了标准的编程接口、丰富可扩展的UIUI组件组件库、事件驱动模型等一套完整的库、事件驱动模型等一套完整的WebWeb应用框架。通过应用框架。通过JSFJSF,可以在页面中轻松自如地使用,可以在页面中轻松自如地使用WEBWEB组件,捕获组件,捕获用户行为所产生的事件,执行验证,建立页面导航。用户行为所产生的事件,执行验证,建立页面导航。7.1 JSF概述uuJSFJSF的优势的优势 UIUI组件(组件(UI-componentUI-component)事件驱动模

3、式事件驱动模式 用户界面到业务逻辑的直接映射用户界面到业务逻辑的直接映射 程序员和网页设计人员的分工程序员和网页设计人员的分工 请求处理生命周期的多阶段划分请求处理生命周期的多阶段划分 伴随工具而生存伴随工具而生存 全面的用户自定义支持全面的用户自定义支持 WebWeb开发的官方标准之一开发的官方标准之一7.1 JSF概述uuJSFJSF应用的组成应用的组成1 1JSFJSF类库及其核心控制器类库及其核心控制器 javax.faces.PROJECT_STAGE javax.faces.PROJECT_STAGE Development Development Faces Servlet Fa

4、ces Servlet javax.faces.webapp.FacesServlet javax.faces.webapp.FacesServlet 1 1 Faces Servlet Faces Servlet /faces/*/faces/*2.2.受管受管BeanBean及其配置及其配置 JSFJSF使用使用JavaBean JavaBean 来达到程序逻辑与视图分离的目的。来达到程序逻辑与视图分离的目的。JSFJSF中使中使用的用的BeanBean称为称为Managed BeanManaged Bean(受管(受管BeanBean)。简单的说,受管)。简单的说,受管BeanBean就

5、是一个被就是一个被Java EEJava EE容器当作托管组件对待的容器当作托管组件对待的POJOPOJO,其作,其作用是在业务逻辑用是在业务逻辑BeanBean及及UIUI组件之间搭起桥梁。它根据用户请求呼组件之间搭起桥梁。它根据用户请求呼叫业务逻辑叫业务逻辑BeanBean,或者是将业务处理结果放置其中,等待,或者是将业务处理结果放置其中,等待UIUI组件组件取出当中的值并将结果显示给用户。取出当中的值并将结果显示给用户。下面是一个下面是一个HelloHello程序的受管程序的受管BeanBean。public class UserBean public class UserBean pr

6、ivate String name;private String name;public void setName(String name)public void setName(String name)this.name=name;this.name=name;public String getName()public String getName()return name;return name;ManagedBean(userBean)/ManagedBean(userBean)/若不指定名称,默认为类名的第一若不指定名称,默认为类名的第一个字母小写。个字母小写。RequestScope

7、dRequestScopedpublic class UserBean public class UserBean .3.Facelets3.Facelets Facelets Facelets是是JSFJSF的视图页面,它是由的视图页面,它是由HTMLHTML标记和标记和JSFJSF标签组成。在标签组成。在JSF1.xJSF1.x中,仍然是使用中,仍然是使用JSPJSP作为视图。作为视图。JSF2.0JSF2.0是是Java EE 6Java EE 6规范的一规范的一部分,它提供了一些新的特性,能够帮助开发人员更加简单的开发部分,它提供了一些新的特性,能够帮助开发人员更加简单的开发JSFJS

8、F应用程序,比如,使用应用程序,比如,使用FaceletsFacelets作为视图。和作为视图。和JSPJSP一样,一样,FaceletsFacelets也是也是VDLVDL(View Declaration Language View Declaration Language 视图声明语言)视图声明语言)的一个具体实现,它允许开发人员使用的一个具体实现,它允许开发人员使用HTMLHTML模板和不同的表现技术模板和不同的表现技术来声明来声明UIUI组件。因为组件。因为FaceletsFacelets视图技术是特意为视图技术是特意为JSFJSF设计的,因此与设计的,因此与JSPJSP相比相比Fa

9、celetsFacelets为为JSFJSF的开发者提供了更加简单、更加强大的编程的开发者提供了更加简单、更加强大的编程模型。基于这个原因,模型。基于这个原因,JSF2.0JSF2.0开始开始FaceletsFacelets将会取代将会取代JSPJSP。4.JSF4.JSF导航规则导航规则 导航决定导航决定JSFJSF页面提交后转到哪个页面。页面提交后转到哪个页面。JSFJSF有两种导航:静态导有两种导航:静态导航和动态导航。航和动态导航。静态导航是指页面导航是静态的,即单击指定按钮总是选择固定静态导航是指页面导航是静态的,即单击指定按钮总是选择固定的页面来呈现响应。的页面来呈现响应。动态导航

10、是根据方法的执行结果来决定响应的页面。要实现动态动态导航是根据方法的执行结果来决定响应的页面。要实现动态导航,提交按钮必须有一个方法引用。导航,提交按钮必须有一个方法引用。7.1 JSF概述uu模板页面与适配页面模板页面与适配页面 页面模板是页面模板是FaceletsFacelets技术的主要优势之一。使用模板可以更好地规技术的主要优势之一。使用模板可以更好地规划页面布局,简化页面开发。使用划页面布局,简化页面开发。使用FaceletsFacelets框架中的模板功能时,框架中的模板功能时,通常会涉及到两种页面:模板页面与模板的适配页面。通常会涉及到两种页面:模板页面与模板的适配页面。模板页面

11、的特征是,在页面中使用一个或多个模板页面的特征是,在页面中使用一个或多个标签来标签来从外部来源中注入内容。而模板的适配页面是,使用从外部来源中注入内容。而模板的适配页面是,使用或或标签引用了模板页面的页标签引用了模板页面的页面文件。面文件。标签是一个模板标签,它将一些可以标签是一个模板标签,它将一些可以被其它模板页面所包含的内容封装起来。其被其它模板页面所包含的内容封装起来。其templatetemplate属性指定将在属性指定将在标签开始和结束之间显示的模板文件所在的路径。标签开始和结束之间显示的模板文件所在的路径。指定使用哪个模版文件后,再通过指定使用哪个模版文件后,再通过对模版文件中每个

12、可供插入的对模版文件中每个可供插入的“锚点锚点”进进行定义。在运行期,具体的内容将会被插入到行定义。在运行期,具体的内容将会被插入到 中定义的锚点位置。这个标签以外的内容将被编译器忽略,不会显中定义的锚点位置。这个标签以外的内容将被编译器忽略,不会显示在视图中。示在视图中。标签和标签和 标签相标签相似,唯一不同的是它不忽略标签外部的内容。似,唯一不同的是它不忽略标签外部的内容。7.1 JSF概述uu案例案例7-1 7-1 在书城项目使用在书城项目使用JSFJSF JSFJSF属于属于WebWeb层技术,类似于层技术,类似于StrutsStruts的作用。的作用。JSFJSF可以与可以与其他架构

13、整合构成应用程序。例如,书城系统采用其他架构整合构成应用程序。例如,书城系统采用EJB+JSF+Hibernate JPAEJB+JSF+Hibernate JPA架构。采用这样的架构,架构。采用这样的架构,EJBEJB项目和上一章是一样的,项目和上一章是一样的,WARWAR项目要使用项目要使用JSFJSF技术,技术,需引入需引入JSFJSF框架,其中控制类使用框架,其中控制类使用JSFJSF受管受管BeanBean实现,实现,视图使用视图使用JSFJSF页面实现。本章继续上一章的设计,因此页面实现。本章继续上一章的设计,因此主要是在主要是在WARWAR项目中实现控制层和视图层。项目中实现控制

14、层和视图层。7.2 JSF表达式语言与标签uuJSFJSF表达式语言表达式语言 JSF ELJSF EL(JSF Expression LanguageJSF Expression Language,JSFJSF表达式语言)类似于表达式语言)类似于JSPJSP中的中的ELEL表达式语言,只不过它是以表达式语言,只不过它是以#表示,如表示,如#user.welcome#user.welcome。即以。即以“#”“#”开始,将变量或表达式放置在开始,将变量或表达式放置在“”“”与与“”“”之间。变量名称可以是之间。变量名称可以是faces-config.xmlfaces-config.xml中定义

15、的名称或中定义的名称或用用ManagedBenaManagedBena标注定义的标注定义的BeanBean,如果是,如果是BeanBean的话,可以通过的话,可以通过使用使用.运算符来存取它的属性,例如:运算符来存取它的属性,例如:JSF ELJSF EL的变量名也可以是的变量名也可以是JSF ELJSF EL预定义的隐含对象。例如,下面预定义的隐含对象。例如,下面的程序使用的程序使用paramparam隐含对象来获取请求参数:隐含对象来获取请求参数:您好您好,7.2 JSF表达式语言与标签uuJSFJSF的的HTMLHTML标签标签 JSFJSF提供的标准的提供的标准的HTMLHTML标签主

16、要包括以下几类:标签主要包括以下几类:uu输出(输出(OutputsOutputs)其名称以其名称以outputoutput作为开头,用于输出指定作为开头,用于输出指定的信息或绑定值。的信息或绑定值。uu输入(输入(InputsInputs)其名称以其名称以inputinput作为开头,用于产生输入框。作为开头,用于产生输入框。uu命令(命令(CommandsCommands)其名称以其名称以commandcommand作为开头,用于产作为开头,用于产生命令或链接按钮。生命令或链接按钮。uu选择(选择(SelectionsSelections)其名称以其名称以selectselect作为开头,

17、用于提供选作为开头,用于提供选项。项。uu其它其它 包括了包括了formform、messagemessage、messagesmessages、graphicImagegraphicImage等等未分类的标签。等等未分类的标签。7.2 JSF表达式语言与标签uuJSFJSF核心标签核心标签 核心库主要包含用于定义视图和子视图,加载资源包,核心库主要包含用于定义视图和子视图,加载资源包,向页面添加任意文本,向组件添加对象等标签。表向页面添加任意文本,向组件添加对象等标签。表7-27-2列出了核心标签。列出了核心标签。uu案例案例7-2 7-2 书城客户注册功能实现书城客户注册功能实现 7.3

18、JSF数据传递方法uu从从JSFJSF页面传递参数给受管页面传递参数给受管BeanBean 使用使用 使用使用 直接绑定属性直接绑定属性uu在请求之间传递对象在请求之间传递对象uu在受管在受管BeanBean之间通信之间通信7.4 数据类型转换与验证uu标准转换器标准转换器 WebWeb应用程序与浏览器之间是使用应用程序与浏览器之间是使用HTTPHTTP进行沟通,所有传送的数进行沟通,所有传送的数据基本上都是字符串文字,而据基本上都是字符串文字,而JavaJava应用程序本身基本上则是对象,应用程序本身基本上则是对象,所以对象数据必须经由转换传送给浏览器,而浏览器送来的数据所以对象数据必须经由

19、转换传送给浏览器,而浏览器送来的数据也必须转换为对象才能使用。也必须转换为对象才能使用。JSFJSF定义了一系列标准的转换器(定义了一系列标准的转换器(ConverterConverter)。对于基本数据类)。对于基本数据类型,型,JSFJSF会使用会使用BooleanBoolean、ByteByte、CharacterCharacter、DoubleDouble、FloatFloat、IntegerInteger、LongLong、ShortShort等自动进行转换。对于等自动进行转换。对于BigDecimalBigDecimal、BigIntegerBigInteger,则会使用,则会使用

20、BigDecimalBigDecimal、BigIntegerBigInteger进行转换,对进行转换,对应的标签是应的标签是和和,它们各自提供一些简单的属性,可以在转换时指定一些转换的格它们各自提供一些简单的属性,可以在转换时指定一些转换的格式细节。式细节。7.4 数据类型转换与验证uu自定义转换器自定义转换器 除了使用标准的转换器之外,还可以通过实现除了使用标准的转换器之外,还可以通过实现javax.faces.convert.Converterjavax.faces.convert.Converter接口自定义转换器,接口自定义转换器,此接口有两个方法:此接口有两个方法:uuObject

21、 getAsObject(FacesContext context,Object getAsObject(FacesContext context,UIComponent component,String str)UIComponent component,String str):接收从客户端经:接收从客户端经由由HTTPHTTP传来的字符串数据,转换为自定义对象。传来的字符串数据,转换为自定义对象。uuString getAsString(FacesContext context,String getAsString(FacesContext context,UIComponent comp

22、onent,Object obj)UIComponent component,Object obj):从:从BeanBean对象得对象得到的对象转换为字符串,以传回给客户端。到的对象转换为字符串,以传回给客户端。7.4 数据类型转换与验证uu标准验证器标准验证器 数据验证是为了检验用户所输入数据的合理性。一般有两种检验:数据验证是为了检验用户所输入数据的合理性。一般有两种检验:语法检验与语意检验。语法检验与语意检验。语法检验是要检查使用者输入的数据是否合乎我们所要求的格式,语法检验是要检查使用者输入的数据是否合乎我们所要求的格式,最基本的就是检查使用者是否填入了值,或值的长度、大小等等最基本的

23、就是检查使用者是否填入了值,或值的长度、大小等等是否符合要求。语意检验是在语法检验之后,在格式符合需求之是否符合要求。语意检验是在语法检验之后,在格式符合需求之后,进一步验证使用者输入的数据语意上是否正确,例如检查使后,进一步验证使用者输入的数据语意上是否正确,例如检查使用者输入的邮件地址是否符合格式。下面的代码段中使用了必填用者输入的邮件地址是否符合格式。下面的代码段中使用了必填值验证和长度验证。值验证和长度验证。JSFJSF提供了三种标准验证器:提供了三种标准验证器:、,分别用于检,分别用于检验双精度数范围、长整数范围和长度。它们都具有验双精度数范围、长整数范围和长度。它们都具有minim

24、umminimum、maximummaximum两个属性。两个属性。7.4 数据类型转换与验证uu自定义验证器自定义验证器 自定义的验证器需要实现自定义的验证器需要实现javax.faces.validator.Validatorjavax.faces.validator.Validator接口,该接口的接口,该接口的validatevalidate()()方法用于验证,如果验证错误,则抛出方法用于验证,如果验证错误,则抛出ValidatorExceptionValidatorException异常。该异常接受一个异常。该异常接受一个FacesMessageFacesMessage对象,这个对

25、象接受三个参数,分别对象,这个对象接受三个参数,分别表示信息的严重程度(表示信息的严重程度(INFOINFO、WARNWARN、ERRORERROR、FATALFATAL)、信息概述与详细信息内容,这些信息将可以)、信息概述与详细信息内容,这些信息将可以使用使用或或标签显示在标签显示在页面上。页面上。7.4 数据类型转换与验证uu案例案例7-3 7-3 为客户注册页增加验证功能为客户注册页增加验证功能7.5 消息处理与国际化支持uu消息处理消息处理 在使用标准转换器或验证器时,当发生错误时,会显在使用标准转换器或验证器时,当发生错误时,会显示默认的错误信息,这些消息可以使用示默认的错误信息,这

26、些消息可以使用或或标签来显示出来,标签来显示出来,而这些默认的错误消息可以通过消息资源文件进行设而这些默认的错误消息可以通过消息资源文件进行设置置uu国际化支持国际化支持1 1创建消息资源文件创建消息资源文件2.2.如何选择语言如何选择语言3.3.设计国际化界面设计国际化界面7.6 JSF生命周期与事件处理uuJSFJSF生命周期生命周期 为了解决对用户处理上没有统一标准的问题,为了解决对用户处理上没有统一标准的问题,JSFJSF引入引入了请求处理生命周期,从而提供了一套标准的处理过了请求处理生命周期,从而提供了一套标准的处理过程,允许开发人员用流水线的方式来处理用户请求,程,允许开发人员用流

27、水线的方式来处理用户请求,这种以流水线的方式来处理用户的请求的过程,被称这种以流水线的方式来处理用户的请求的过程,被称为为JSFJSF生命周期。在生命周期。在JSFJSF中使用中使用LifecycleLifecycle接口来表示生接口来表示生命周期。命周期。JSFJSF生命周期所涉及的六个阶段:生命周期所涉及的六个阶段:uuRESTORE_VIEW(RESTORE_VIEW(恢复视图恢复视图)uuAPPLY_REQUEST_VALUES(APPLY_REQUEST_VALUES(应用请求值应用请求值)uuPROCESS_VALIDATIONS(PROCESS_VALIDATIONS(验证请求值

28、验证请求值)uuUPDATE_MODEL_VALUES(UPDATE_MODEL_VALUES(更新模型值更新模型值)uuINVOKE_APPLICATION(INVOKE_APPLICATION(调用应用调用应用)uuRENDER_RESPONSE(RENDER_RESPONSE(渲染响应渲染响应)7.6 JSF生命周期与事件处理uuPhasePhase事件与事件与JSFJSF监听器监听器 JSF JSF的请求执行到响应,完整的过程会经过六个阶段。在每个阶段的前后的请求执行到响应,完整的过程会经过六个阶段。在每个阶段的前后会引发会引发javax.faces.event.PhaseEventj

29、avax.faces.event.PhaseEvent,如果想在每个阶段的前后捕,如果想在每个阶段的前后捕捉这个事件,以进行一些处理,则可以实现捉这个事件,以进行一些处理,则可以实现javax.faces.event.PhaseListenerjavax.faces.event.PhaseListener接口,实现该接口的类称为接口,实现该接口的类称为JSFJSF监听监听器。器。PhaseListenerPhaseListener有三个必须实现的方法有三个必须实现的方法getPhaseId()getPhaseId()、beforePhase()beforePhase()与与afterPhase

30、()afterPhase(),其中,其中getPhaseId()getPhaseId()传回一个传回一个PhaseIdPhaseId对象,代表对象,代表ListenerListener想要被通知的时机,可以设定的时机有:想要被通知的时机,可以设定的时机有:uuPhaseId.RESTORE_VIEW PhaseId.RESTORE_VIEW uuPhaseId.APPLY_REQUEST_VALUES PhaseId.APPLY_REQUEST_VALUES uuPhaseId.PROCESS_VALIDATIONSPhaseId.PROCESS_VALIDATIONSuuPhaseId.UP

31、DATE_MODEL_VALUES PhaseId.UPDATE_MODEL_VALUES uuPhaseId.INVOKE_APPLICATION PhaseId.INVOKE_APPLICATION uuPhaseId.RENDER_RESPONSE PhaseId.RENDER_RESPONSE uuPhaseId.ANY_PHASE PhaseId.ANY_PHASE 其中其中PhaseId.ANY_PHASEPhaseId.ANY_PHASE指的是任何的阶段转换时都进行通知;可以指的是任何的阶段转换时都进行通知;可以在在beforePhase()beforePhase()与与afte

32、rPhase()afterPhase()中编写阶段前后想要处理的动作。中编写阶段前后想要处理的动作。7.6 JSF生命周期与事件处理uu动作事件动作事件通过通过ActionListenerActionListener来监听动作事件,例如:来监听动作事件,例如:h:commandButton value=action=#textBean.outcome/uu即时事件即时事件 所谓的即时事件(所谓的即时事件(Immediate EventsImmediate Events),是指),是指JSFJSF视图组件在取得请求值之后,立即处理指定的事件,视图组件在取得请求值之后,立即处理指定的事件,而不再进

33、行后续的转换器处理、验证器处理、更新模而不再进行后续的转换器处理、验证器处理、更新模型值等流程。型值等流程。h:commandButton value=#msgs.Text actionListener=#user.changeLocale/7.6 JSF生命周期与事件处理uu值变事件值变事件 如果使用者改变了如果使用者改变了JSFJSF输入组件的值后提交表单,就会输入组件的值后提交表单,就会发生值变事件(发生值变事件(ValueChangeEventValueChangeEvent)。要处理这个)。要处理这个事件,有两种方法。一种方法是直接设定事件,有两种方法。一种方法是直接设定JSFJSF输入组件输入组件的的valueChangeListenervalueChangeListener属性;另一个方法是实现属性;另一个方法是实现javax.faces.event.ValueChangeListenerjavax.faces.event.ValueChangeListener接口,然接口,然后通过后通过标签注册。标签注册。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 大学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com