2009年1月15日星期四

JSF_015:JSF 高级开发之一:开发自己的 JSF 组件

如果只是使用JSF,你只需要知道「执行验证」、「更新模型值」与「唤起应用程序」这三个阶段及中间的事件触发,JSF 将这三个阶段之外的其它阶段之复杂性隐藏起来了,您不需要知道这几个阶段的处理细节。然而如果您要自订组件,则您还必须知道「恢复画面」、「套用请求值」与「绘制响应」这些阶段是如何处理的,这几个阶段相当复杂,所幸的是您可以使用JSF 所提供的框架来进行组件自订,JSF 提供的框架已经很大程度上降低了组件制作的复杂性。当然,即使JSF框架降低了复杂性,但实际上要处理JSF自订组件还是很复杂的一件事,在尝试开发自订组件之前,您可以先搜寻一些网站,像是 Apache MyFaceshttp://myfaces.apache.org/ ,看看是不是已经有相关类似的组件已经开发完成。
一个JSF 组件包括了三个部份:Tag、Component 与Renderer。
Tag 即之前一直在使用的JSF 卷标,类似于HTML 卷标,JSF 卷标主要是方便网页设计人员进行版面配置与数据呈现的一种方式,实际的处理中,JSF 标签的目的在于设定Component 属性、设定验证器、设定数据绑定、设定方法绑定等等。
Component 的目的在于处理请求,当请求来到伺服端应用程序时,每一个Component都有机会根据自己的client id,从请求中取得属于自己的值,接着Component 可以将这个值作处理,然后设定给绑定的bean。
当请求来到Web 应用程序时,HTTP 中的字符串内容可以转换为JSF 组件所需的值,这个动作称之为译码(decode),相对的,将JSF 组件的值转换为HTTP 字符串数据并送至客户端,这个动作称之为编码(encode),Component 可自己处理编码、译码的任务,也可以将之委托给 Renderer 来处理。
Renderer 是一个可替换的组件,您的Component 可以搭配不同的Renderer,而不用自行担任绘制响应或译码的动作,这会让您的Component 可以重用,当您需要将响应从HTML 转换为其它的媒介时(例如行动电话网络),则只要替换Renderer 就可以了,这是一个好处,或者您可以简单的替换掉一个Renderer,就可以将原先简单的HTML 响应,替换为有JavaScript 功能的Renderer。

没有评论: