JSF技术应用.ppt_第1页
JSF技术应用.ppt_第2页
JSF技术应用.ppt_第3页
JSF技术应用.ppt_第4页
JSF技术应用.ppt_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

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

文档简介

1、JSF技术应用,演讲者:刘浩,JSF简介,JSF即JavaServer Faces,是一种新的用于构架j2ee应用用户界面的技术,适合于基于MVC架构的应用中。 JSF 有三部分: 一套预制的UI组件集 一个事件驱动的编程模型 一个允许第三方开发者提供附加组件的组件模型,JSF技术主要功能,Managed Bean 工具 验证工具 丰富且可扩展的组件库 插入式呈现工具包 对具体用户事件响应的导航 跨请求保留应用程序状态 转换模型,JSF工作原理,JSF应用程序实质上是一个运行在一个Java(TM) 2 Platform, Enterprise Edition (J2EE(TM) platfor

2、m) 兼容的容器中的 Servlet 或Java ServerPages(JSP) 应用程序。但是,JSF 不要求在应用程序中使用 JSP 页面,您可以自由选择直接使用 Servlets 或者其他模板技术。如果确实对 JSP 容器使用了 JSF,您将通过 JSF 的客户组件标签从内建的 JSF 内核和 HTML 组件库中受益。JSF 组件代表像文本字段、表单、按钮、表格、复选框等的 Web 控件。,JSF设计目标,设计目标是简化Web应用的开发和维护,JSF对Web应用开发的简化,可以概括为四个方面: 第一,JSF提供了一组用户界面组件,这些组件是可重用的,程序员可以利用这些组件方便的构建We

3、b应用的用户界面; 第二,利用JSF,在用户界面组件和业务逻辑之间传递数据将变得非常简单; 第三,JSF可以维持用户组件的状态,并且可以将状态从一个请求传递到另一个请求; 第四,JSF允许程序员非常容易地开发自定义的用户界面组件,而且这些自定义用户界面组件同样可以重用。,简单的JSF程序,JSF只是J2EE的一个标准,是一套接口集和一些基本实现,要使用JSF需要下载jsf的实现,在下载压缩文件并解压缩之后,将其 lib 目录下的 jar 文件复制至您的Web应用程序的/WEB-INF/lib目录下,另外您还需要 jstl.jar 与 standard.jar 文件,下边来看个简单的例子。,目录

4、结构: hellojsf |- build.xml |- src |- WEB-INF |-|- web.xml |-|- faces-config.xml |-|- classes |-|- lib |-|-|-jsf-impl.jar |-|-|-jsf-api.jar |-|-|-commons-digester.jar |-|-|-commons-collections.jar |-|-|-commons-beanutils.jar |-|-|-commons-logging.jar |-|-|-standard.jar |-|-|-jstl.jar,/ hello.jsp 保存在根目

5、录下,从这个页面可以看出,jsf 就是用他自己的UI组件代替了html标签,又加了些特有的属性,很容易理解,值得注意的是,所有组件都要定义在之内。 熟悉jsp的可能对“#helloBean.numControls ”感觉很熟悉,不同的是这个是以“ # ”开头的, “ binding ”属性的值是个jsf el 表达式,它指定了helloBean类中的controlPanel方法可以直接对此组件进行操作,h:commandButton 是按钮组件,可以产生 action event,他的 actionListener 属性制定了用helloBean类中的addControls方法来处理这个act

6、ion event,其他的都比较容易理解,来看下个页面。,/goodbye.jsp 保存在根目录下,这个页面更简单,只是一些输出。 在 hello.jsp goodbye.jsp 中都通过 jsf el 表达式引用了一个 backing bean, 叫 helloBean, 他包括了我们这个应用所需的一切,保存在 src 下 这里面最复杂的就是 addControls 方法了,它是一个 action listener 方法,因为他接收了一个唯一的参数 ActionEvent。 在 hello.jsp 中: “” 这句话告诉 jsf,当用户点击Redisplay按钮时jsf会用这个方法来处理 a

7、ction event,在 hello.jsp 中: “” 当用户点击”Goodbye“按钮时,goodbye方法会被执行,他只是返回success,在配置文件中这个输出与某个页面相联系, 下面就来看看配置文件faces-config.xml,/faces-config.xml The one and only HelloBean. helloBean com.HelloBean session Navigation from the hello page. /hello.jsp success /goodbye.jsp ,jsf 象大多数框架一样,有一个配置文件,在之中你可以定义 导航规则、

8、初始化javabean、注册你自己的jsf组件、验证器,和一些面向jsf应用其他方面的其他配置 在这个配置文件中定义了一个bean, 指定了他的名字(这个名字就是我们在页面中使用的名字),类全名,和使用范围。还定义了一个导航规则, hello.jsp有一个“Goodbye”按钮转到其他页,所以只有一个单独的navigation-case,当输出为“success”时,就会显示goodbye.jsp。 下面写完web.xml后就可以看到效果了,/web.xml hello world Welcome to JavaServer Faces. Faces Servlet javax.faces.w

9、ebapp.FacesServlet 1 Faces Servlet *.faces /hello.jsp ,JSF与Struts的异同,Struts和JSF都属于表现层框架,这两种分属不同性质的框架,后者是一种事件驱动型的组件模型,而Struts只是单纯的MVC模式框架。 首先事件是指从客户端页面(浏览器)由用户操作触发的事件,Struts使用Action来接受浏览器表单提交的事件,这里使用了Command模式,每个继承Action的子类都必须实现一个方法execute。 在struts中,实际是一个表单Form对应一个Action类(或DispatchAction),换一句话说:在Stru

10、ts中实际是一个表单只能对应一个事件,struts这种事件方式称为application event,application event和component event相比是一种粗粒度的事件。 struts重要的表单对象ActionForm是一种对象,它代表了一种应用,这个对象中至少包含几个字段,这些字段是Jsp页面表单中的input字段,因为一个表单对应一个事件,所以,当我们需要将事件粒度细化到表单中这些字段时,也就是说,一个字段对应一个事件时,单纯使用Struts就不太可能,当然通过结合JavaScript也是可以转弯实现的。,而这种情况使用JSF就可以方便实现, #login.userI

11、d表示从名为login的JavaBean的getUserId获得的结果,这个功能使用struts也可以实现,name=login property=userId 关键是第二行,这里表示如果userId的值改变并且确定提交后,将触发调用类UserLoginChanged的processValueChanged(.)方法。 JSF可以为组件提供两种事件:Value Changed和 Action. 前者我们已经在上节见识过用处,后者就相当于struts中表单提交Action机制,它的JSF写法如下: 从代码可以看出,这两种事件是通过Listerner这样观察者模式贴在具体组件字段上的,而Strut

12、s此类事件是原始的一种表单提交Submit触发机制。如果说前者比较语言化(编程语言习惯做法类似Swing编程);后者是属于WEB化,因为它是来自Html表单。,基本配置,Struts和JSF都是一种框架,JSF必须需要两种包JSF核心包、JSTL包(标签库),此外,JSF还将使用到Apache项目的一些commons包,这些Apache包只要部署在你的服务器中既可。 所以,从JSF的驱动包组成看,其开源基因也占据很大的比重,JSF是一个SUN伙伴们工业标准和开源之间的一个混血儿。 和Struts一样的是也必须在web.xml中有如下配置: Faces Servlet javax.faces.w

13、ebapp.FacesServlet 1 Faces Servlet *.faces 这里和Struts的web.xml配置何其相似,简直一模一样,正如Struts的struts-config.xml一样,JSF也有类似的faces-config.xml配置文件: /index.jsp login /welcome.jsp user com.UserBean session ,在Struts-config.xml中有ActionForm Action以及Jsp之间的流程关系,在faces-config.xml中,也有这样的流程,我们具体解释一下Navigation: 在index.jsp中有一

14、个事件: action的值必须匹配form-outcome值,上述Navigation配置表示:如果在index.jsp中有一个login事件,那么事件触发后下一个页面将是welcome.jsp JSF有一个独立的事件发生和页面导航的流程安排,这个思路比struts要非常清晰。,managed-bean类似Struts的ActionForm,正如可以在struts-config.xml中定义ActionForm的scope一样,这里也定义了managed-bean的scope为session。 但是如果你只以为JSF的managed-bean就这点功能就错了,JSF融入了新的Ioc模式/依赖性

15、注射等技术。 Ioc模式 对于Userbean这样一个managed-bean,其代码如下: public class UserBean private String name; private String password; / PROPERTY: name public String getName() return name; public void setName(String newValue) name = newValue; / PROPERTY: password public String getPassword() return password; public void

16、 setPassword(String newValue) password = newValue; , user com.UserBean session name me password secret faces-config.xml这段配置其实是将me赋值给name,将secret赋值给password,这是采取Ioc模式中的Setter注射方式。,Backing Beans 对于一个web form,我们可以使用一个bean包含其涉及的所有组件,这个bean就称为Backing Bean, Backing Bean的优点是:一个单个类可以封装相关一系列功能的数据和逻辑。 说白了,就是一

17、个Javabean里包含其他Javabean,互相调用,属于Facade模式或Adapter模式。 对于一个Backing Beans来说,其中包含了几个managed-bean,managed-bean一定是有scope的,那么这其中的几个managed-beans如何配置它们的scope呢? . visit #sessionScope.visit 这里配置了一个Backing Beans中有一个setVisit方法,将这个visit赋值为session中的visit,这样以后在程序中我们只管访问visit对象,从中获取我们希望的数据(如用户登陆注册信息),而visit是保存在session

18、还是application或request只需要配置既可。,JSF优势,JSF优势之一:UI组件(UI-component) JSF优势之二:事件驱动模式 JSF优势之三:用户界面到业务逻辑的直接映射 JSF优势之四:程序员和网页设计人员的分工 JSF优势之五:请求处理生命周期的多阶段划分 JSF优势之六:伴随工具而生存 JSF优势之七:全面的用户自定义支持 JSF优势之八:Web开发的官方标准之一,UI组件(UI-component),UI组件(UI-component)一直是桌面程序的专利,web程序中,虽然HTML定义了基本的UI标签,但要使这些UI标签像UI组件那样工作,还需要很多代码

19、片断来处理数据及其表现形式,而且有效地组织这些代码片断使其协调一致也是一件繁琐的工作。JSF的UI组件是真正意义上的UI 组件,能极大地简化程序员的工作,例如,在页面上放置一个文本输入框,这个输入框立即具备了数据填充、界面更新、事件侦听、动作触发、有效性检查和类型转换的功能。更为重要的是,程序员只需根据业务逻辑编写核心业务代码,JSF会保证代码在合适的时候被执行,完全不用考虑代码与代码之间该如何来配合。,事件驱动模式,事件是面向对象方法的重要组成部分,对象之间通过事件进行沟通和交流,使得一个或多个对象能够对另一个对象的行为作出响应,共同合作去完成一项业务逻辑。通常,编写Web程序时,程序员要为

20、对象之间的沟通设计机制,编写代码。虽然沟通的内容属于业务逻辑,但沟通的机制显然与业务没有太大关系,程序员因此为业务逻辑之外的功能浪费了时间。JSF改变了这种状况。 JSF的事件和侦听模式与大家熟悉的Javabean的事件模式类似,有Java基础的程序员并不需要学习任何新的东西。JSF的UI组件可以产生事件,例如,当页面上一个文本输入框的内容被修改时,会发出一个“值改变事件”。另一个对象如果对“值改变事件”感兴趣,只需注册为该对象的侦听者,并编写处理例程,即可命令JSF在事件发生时自动调用处理例程。JSF做了所有该做的事,留给程序员的只有业务逻辑代码的编写。,用户界面到业务逻辑的直接映射,举个例

21、子,表单提交是Web编程最常见的任务,也是最复杂的任务之一。当用户在网页上点击“确定”按钮时,浏览器将生成一个HTTP请求,发往服务器端的某个Servlet,执行该Servlet的service方法。在service方法中,HTTP请求需要经历解码、类型转换、有效性验证、状态保存、数据更新等环节,处理这些环节的所有细节,对程序员来说是沉重的负担。在JSF下,这些工作的很大一部分都由框架承担了,在程序员看来,这个过程是透明的,用户界面端的HTTP请求可以直接映射到后端的一个事件处理例程,JSF起到了承前启后的作用。,程序员和网页设计人员的分工,在JSP中,程序员和网页设计人员的工作有时候是互相交

22、织、无法区分的。这是因为JSP页面中掺入了网页设计人员所不熟悉的一些JSP标签,甚至是晦涩的Java代码。要求网页设计人员理解这些标签和代码是不现实的,不符合分工合作的原则。在JSF中,框架为网页设计人员提供了一套标准的UI组件,在工具的支持下,可以通过拖放简单地添加到网页上,然后设置某些显示属性来满足视觉要求。网页设计人员不需要知道UI组件背后的复杂代码,那是程序员的事,而程序员也不需要再处理任何与视觉相关的细节,程序员所做的只是给UI组件绑定类的属性或方法。虽然程序员和网页设计人员需要修改同一份文件,但他们各司其职,各得其所,互不干扰。程序员和网页设计人员工作的明确划分,是JSF在易用性方面迈出的一大步。,请求处理生命周期的多阶段划分,虽然都是建立在Servlet基础之上,但JSF的生命周期要比JSP复杂得多。JSP的生命

温馨提示

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

评论

0/150

提交评论