JSF生命周期
JSF的每个元件基本上都是可替换的,像是转换器(Converter)、验证器(Validator)、元件(Component)、绘制器(Renderer)等等,每个元件都可以替换让JSF在使用时更有弹性。
但相对的所付出的就是元件组合时的复杂性,为此,最基本的,如果您打算自订一些 JSF元件,那么您对于JSF生命周期处理请求的每个阶段必须要有所了解。
JSF处理请求时的每个阶段与简单说明,起始状态即使用者端发出请求时,终止状态则相当于绘制器发出回应时:
扣除事件处理,JSF生命周期总共必须经过六个阶段:
◆回复画面(Restore View)
对于选择的页面如果是初次浏览则建立新的元件树。如果是会话阶段,会从使用者端或伺服器端的资料找寻资料以回复每个元件的状态并重建元件树,如果不包括请求参数,则直接跳过接下来的阶段直接绘制回应。
◆套用申请值(Apply Request Values)
每个元件尝试从到来的请求中找寻自己的参数并更新元件值,在这边会触发ActionEvent,这个事件会被排入伫列中,然后在唤起应用程序阶段之后才会真正由事件处理者进行处理。然而对于设定immeduate为true的命令(Commamnd)元件来说,会立即处理事件并跳过之后的阶段直接绘制回应,而对于设定immediate为true的输入(Input)元件,会马上进行转换验证并处理值变事件,之后跳过接下来的阶段,直接绘制回应。
◆执行验证(Process Validations)
进行转换与验证处理,如果验证错误,则会跳过之后的阶段,直接绘制回应,结果是重新呼叫同一页绘制结果。
◆更新模型值(Update Model Values)
更新每一个与元件绑定的backing bean或模型物件。
◆唤起应用程序(Invoke Application)
处理动作事件,并进行后端应用程序逻辑。
◆绘制回应(Render Response)
使用绘制器绘制页面。
如果您只是要「使用」JSF,则您最基本的只需要知道「执行验证」、「更新模型值」、与「唤起应用程序」这三个阶段及中间的事件触发,JSF参考实作将这三个阶段之外的其它阶段之复杂性隐藏起来了,您不需要知道这几个阶段的处理细节。
然而如果您要自订元件,则您还必须知道「回复画面」、「套用请求值」与「绘制回应」这些阶段是如何处理的,这几个阶段相当复杂,所幸的是您可以使用JSF 所提供的框架来进行元件自订,JSF提供的框架已经很大程度上降低了元件製作的复杂性。
当然,即使JSF框架降低了复杂性,但实际上要处理JSF自订元件还是很复杂的一件事,在尝试开发自订元件之前,您可以先搜寻一些网站,像是 Apache MyFaces http://myfaces.apache.org/,看看是不是已经有相关类似的元件已经开发完成,省去您重新自订元件的气力。
【编辑推荐】