5.2. 引擎与构件分离

在OperaMasks 3.0以前的版本中,CVS中的OperaMasks只有一个工程org.operamasks.faces,里面包含:JSF API、Facelets API、JSF构件、OperaMasks引擎内核、OperaMasks构件、OperaMasks构件渲染器、OperaMasks Spring、示例工程、Ant任务及打包脚本、部分测试代码等内容。虽说OperaMasks是开源的,但是广大爱好者从CVS服务器上检出OperaMasks工程后,看到如此多的类往往十分迷惑,至于学习OperaMasks、调试OperaMasks代码、开发自己的原生构件更是无从下手。

为了广大爱好者更好地学习OperaMasks和为OperaMasks项目做出贡献,在OperaMasks 3.0版本中对原单一工程进行了引擎与构件分离,原工程被分为了以下7个工程:

表 5.1. OperaMasks 3.0相关工程列表

工程名称工程说明所依赖的工程主要内容说明
jsf-apiJSF API相关的代码,OperaMasks的基础javax.faces包中包含FactoryFinder和FacesException类,FactoryFinder用来找到所有JSF API里指定的工厂对象;FacesException类是java.lang.RuntimeException类的一个子类,封装了一般的JSF异常。javax.faces.application包中包含了一些重要的类,如NavigationHandler类、Application类及FacesMessage类等。javax.faces.compoent包中提供了表示JSF标准UI构件的接口和类。javax.faces.context包中包含定义每个请求的状态信息的类和接口。javax.faces.convert包中包含了与数据转换相关的类和接口。javax.faces.el包中包含用于求值和处理在JSF应用的JSP页面中表达式的类。javax.faces.event包中包含用于事件处理的类和接口。javax.faces.lifecycle包中包含与请求处理生命周期有关的类和接口。javax.faces.render包中包含3个类:Renderer、RenderKit和RenderKitFactory,Renderer负责把UI构件的内部表示转换成JSF客户端可以理解的形式;RenderKit表示Renderer实例的集合;RenderKitFactory是一个可返回RenderKit实例的工厂对象。javax.faces.validator包中包含Validator接口及一些常见的验证器。javax.faces.webapp包的成员是集成JSF和Web应用所需的类。
jsf-faceletsFacelets API相关的代码jsf-apicom.sun.facelets包中包含一些公用的API。com.sun.facelets.compiler包中包含Facelets编译器相关的类。com.sun.facelets.component包中包含Facelets构件及部分渲染器。com.sun.facelets.el包中包含一些支持EL集成的类。com.sun.facelets.impl包中包含Facelets API的默认实现。com.sun.facelets.tag包中包含Facelets实现的tag类。com.sun.facelets.tag.jsf包中包含http://java.sun.com/jsf/core和http://java.sun.com/jsf/html的库。com.sun.facelets.tag.jsf包中包含http://java.sun.com/jstl/core和http://java.sun.com/jstl/functions的库。com.sun.facelets.tag.ui包中包含http://java.sun.com/jsf/ui的库。com.sun.facelets.util包中包含一些公用的类。
operamasks-coreOperaMasks内核相关的代码jsf-api、jsf-faceletssrc/main/java/operamasks-core源文件夹中包含OperaMasks中与构件无关的内核代码。src/main/java/comp-api包含OperaMasks中与构件相关的内核代码。src/main/resources源文件夹中包含该工程的一些国际化文件和配置文件。
comp-jsfOperaMasks内核相关的代码jsf-api、jsf-facelets、operamasks-coreorg.operamasks.faces.render包中包含OperaMasks构件渲染器相关的分共类和JSF HTML构件的渲染器。org.operamasks.faces.webapp包中包含JSF HTML构件的tag类。
comp-coreOperaMasks构件及渲染器相关的代码jsf-api、jsf-facelets、operamasks-core、comp-jsf该工程包含了OperaMasks中ajax、layout、om、widget这4个命名空间中所有构件代码。org.operamasks.faces.binding包中包含了IoVC时用到的一些Annotation的处理类。org.operamasks.faces.component包中包含了OperaMasks构件(JSF构件除外)的构件类及一些辅助类。org.operamasks.faces.event包中包含了与OperaMasks事件模型相关的类和接口。org.operamasks.faces.extra.messagebox中包含了extra:message构件的所有代码。org.operamasks.faces.render包中包含了OperaMasks构件(JSF构件除外)的渲染器类。org.operamasks.faces.util包中包含一些公用的类。org.operamasks.faces.webapp包中包含了OperaMasks构件(JSF构件除外)的tag类。
operamasks-springOperaMasks与Spring整合的相关代码jsf-api、jsf-facelets、operamasks-coreorg.operamasks.faces.spring包中包含了一个ApplicationListener。org.operamasks.faces.spring12包中包含了与Spring1.2整合的类。org.operamasks.faces.spring20包中包含了与Spring2.0整合的类。org.operamasks.faces.spring25包中包含了与Spring2.5整合的类。org.operamasks.faces.spring30包中包含了与Spring3.0整合的类。
operamasks-builderOperaMasks打包相关的代码jsf-api、jsf-facelets、operamasks-core、comp-jsf、comp-core、operamasks-spring使用该工程可以将以上各工程打包成jar包。运行build.xml这个ant脚本即可打包,打包后的结果在工程的release/operamasks-faces目录中(其中release/operamasks-faces/lib目录中为开发用的包含class的二进制jar包,release/operamasks-faces/src目录中为源代码jar包),将release/operamasks-faces/lib中的jar包放到其它Web服务器或工程构建路径中即可使用。