JSF教程(5)——生命周期概述(续)

来源:互联网 发布:淘宝上的新奇玩意 编辑:程序博客网 时间:2024/06/02 07:16

JSF页面在其内部是以一个树的形式进行表示的(放到哪先别管,后面的文章详细的告诉你),就像我们平时写xml那样,有最顶级的父节点以及下面的孩子节点,孙子节点等等。这样的一个对象在JSF当中叫做View(视图?),这就很好能解释之前为什么会有ViewScope这个注解来标识manageBean的范围了。相信读到这里再去理解前面文章中的Scope会有更深刻的理解。

关于学习

在学习的过程中笔者认为有两点最为重要:“知之为知之,不知为不知”以及“不懂装懂”。两句结合起来将会保证自己在学习的过程中既不骄傲也不自卑。但是要做到上面两点是很困难的,大部分人是把这两点做反了,在别人面前不懂装懂后来连自己也被骗了,失去了提升自己的机会;自己在学习的时候因为一点点的小细节耽误的很多时间,导致学习效率低下(学习不能持久)。总是想把什么东西都搞懂,殊不知这是及其错误的做法。因为没有什么知识是完全孤立的,也没有哪个学科是几个小时几天几个月甚至几年能搞懂的,你所了解的都只能说是一个知识体系的一部分而已。所以在学习的时候不懂装懂是很有必要的。遇到不懂的东西如果不影响往下看姑且继续往下学习,很有可能后面猛然间就弄懂了。(就像上面所说的对ViewScope的理解那样)

在整个JSF的生命周期中JSF的实现者必须将view建立出来,无论在整个生命周期过程中要经历哪些过程,最终必须要将页面展现在客户端中。在这一些列的过程中需要对客户端传来的参数进行格式化(宏观生命周期中的转化参数),因为从客户端哪里得到的大部分的参数都是字符串类型的,需要处理之后传递给后面的业务逻辑进行操作。

JSF的整个生命周期如下图所示,大致了解一下就好,后面会详细阐述具体每一个步骤的过程及其原理。

就像上一篇博客里提到的那样,一个Web应用的生命周期开始于一个请求,在这里我们人为地将请求分成两种不同的类型,第一种是initial请求就是第一次请求某个页面或者这个应用,第二个是postbacks请求就是非第一次请求。为什么会把请求分为两种,相信很多人刚刚开始看这个生命周期的时候都会有这个疑问,因为在大部分熟悉的的MVC框架中好像没有明确的区别initialpostbacks两种请求。比如对SpringMVC而言,是通过请求url转到相应的方法,然后在方法中执行一系列的操作,最终返回字符串,根据字符串转到相应的页面。这其中没有initial请求和postbacks请求的区别,以为无论哪一种对与SpringMVC而言都是相同的处理都是执行url对应的方法。

而对于JSF而言两种不同情况的请求在其生命周期中是区别对待的,如果是initial方式的请求,那么只需要执行整个生命周期中的Restore ViewRender Response两个阶段。因为JSF知道initial请求中没有用户的输入以及其他的事件被执行,仅仅是呈现返回的视图(View)而已。如果是postback请求那么就要经历所有的声明周期阶段。

 

笔者的理解

JSF与其他MVC框架对待请求的不同处理归根结底是因为JSF更加抽象(基于组件而非暴露底层HTTP),让开发者在开发的时候面对的是一个个的组件,而非简单的JSP或者XHTML页面;对于其他的MVC框架而言,他们将整个请求以及返回的细节暴露给开发者,所以对于类似于StrutsSpringMVC这样的框架而言所有的请求都是一样的,不需要区别对待(都是通过请求处理数据然后以HTML的形式返回给客户端)。而JSF在设计上则是将数据与组件分开,在Render Response阶段采用的是将绑定好数据的组件在页面渲染出来。设计思想的不同从根本上造成了两种框架对请求区别对待的结果。

至于JSF为什么要这么设计等我们学习完JSF的生命周期再来详细的探讨。

4 0
原创粉丝点击