龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > web编程 > Javascript编程 >

基于AJAX和JSF打造丰富的互联网组件之Mabon篇(1)(2)

时间:2013-03-06 14:58来源:未知 作者:admin 点击:
分享到:
十、LifecyclePhase类 Mabon LifecyclePhase是所有生命周期阶段的基类。 ApplyRequestValuesPhase,InvokeApplicationPhase和RenderResponsePhase类―既然你仅想取回数据而不想以任
十、LifecyclePhase类

Mabon LifecyclePhase是所有生命周期阶段的基类。

•ApplyRequestValuesPhase,InvokeApplicationPhase和RenderResponsePhase类―既然你仅想取回数据而不想以任何方式修改组件层次或底层模型,那么你不需要包括Restore View,Process Validations和Update Model阶段。Mabon阶段执行类似于缺省的生命周期的操作,例如解码一个输入的请求,调用应用程序逻辑,并且生成响应。

•FacesLifecycleServlet类―这是一个可重用的servlet,它将初始化FacesContextFactory并且在它的第一次请求期间查找MabonLifecycle。它将创建FacesContext,然后调用作为MabonLifecycle的一部分的三个生命周期阶段。由Web应用程序所定义的Servlet映射将把Mabon请求直接转发到这个FacesLifecycleServlet。

•LifecycleFactoryImpl类―这个类的唯一目的是添加第二个生命周期―MabonLifecycle。

•MabonViewHandler类―在初始生成期间,一个定制的屏幕生成器必须提供一个到支持bean的路径―该bean可能被FacesLifecycleServlet拦截和使用,在InvokeApplicationPhase调用这个参考支持bean期间。通过使用Mabon协议,组件创作者可以从能够被生成到客户端的MabonViewHandler中得到一个唯一的路径。如果组件创作者使用ViewHandler.getResourceURL()方法的路径参数传递字符串(显示于代码示例1中),那么MabonViewHandler将返回显示于代码示例2中的可以被写向客户端的字符串。

代码示例1:Mabon协议:

mabon:/managedBean.getValidDates

代码示例2:Mabon评估Mabon协议后返回的字符串:

///managedBean.getValidDates

在一个AJAX请求期间,这个URL根据请求发送并且被FacesLifecycleServlet所拦截。

十一、Mabon:初始化请求

Mabon实现是特别为AJAX请求设计的并且使用JSON语法实现一种通讯通道。这种方案让使用托管bean的AJAX组件取数据并且与服务器进行通讯而不必经历一个完整的JSF生命周期。那么,它是如何工作的呢?在应用程序启动时,Mabon将把MabonLifecycle作为JSF LifecycleFactory上下文的一部分添加。

在起始请求时,Mabon仅被代理到基本的JSF实现,并且,如果需要的话,仅在生成器响应阶段是活动的。

在图3的序列图中,一个包含一个定制的AJAX组件的页面被执行。为了能够工作,这个AJAX组件必须从一个底层支持bean中获取数据。在encodeBegin()期间,该组件的AJAX生成器将使用Mabon协议(mabon:/)输出(写)引用该支持bean的一个目标URL。为了得到这个URL,生成器将调用ViewHandler上的getResourceURL()方法。它将传递一个匹配该方法(它负责为支持bean(例如,mabon:/managedBean.getSuggestions)绑定表达式)的字符串。在MabonViewHandler中的这个getResourceURL()方法将返回一个完整的路径:

///managedBean.getSuggestions―它可以被写到文档中。

 
图3.Mabon初始请求序列图

十二、Mabon:数据取请求

在页面被生成到客户端后,它包含一个目标URL―指向AJAX组件取回数据所需要的支持bean(例如,///managedBean.getValidDates)。在后面的AJAX请求中,这个字符串将被Mabon实现所拦截并且用于调用支持bean并且把结果返回到客户端(图4)。

 
图4.Mabon/AJAX数据回取请求序列图

一旦提交一个支持AJAX的组件,即创建一个新的XMLHttpRequest对象,它能够与服务器异步通讯以从托管bean中取回数据。这个请求被FacesLifecycleServlet所拦截,这将通过Mabon生命周期而不是默认的JSF生命周期实现路由请求。

当FacesLifecycleServlet拦截该请求时,通过顺序地调用每个Mabon生命周期阶段,开始执行请求处理。首先,你执行ApplyRequestValuesPhase,这将解码该请求并且得到托管bean参考和该请求的托管bean需要的方法参数。其次,你执行InvokeApplicationPhase―它将基于托管bean参考创建一个MethodBinding,并调用这个MethodBinding以传递任何参数,并且返回结果。第三,Render-ResponsePhase使用这个结果并把它写回到客户端。

十三、Mabon API

接下来的部分,我们将讨论一些可用的API以及如何在一个应用程序中进行Mabon注册。

精彩图集

赞助商链接