在使用OperaMasks进行开发或OperaMasks项目已经运行后可能有时需要对OperaMasks进行升级。升级原因一般有以下几种:
升级的基本思路是从 OperaMasks官方网站 上下载最新的OperaMasks,然后用其中的jar文件覆盖掉原来对应的位置的同名文件。下面以将Apusic Server中OperaMasks升级到3.x版本(3.0以上4.0以下的版本)为例,其它Web服务器中升级OperaMasks请参考第 9 章 多服务器部署中相关内容。
首先去 OperaMasks官方网站 的 下载中心 去下载最新的OperaMasks(Binary为服务器上使用的二进制文件,主要是一些class文件;Source是OperaMasks的源代码,OperaMasks是开源的,里面主要是一些Java文件),并进行解压。
OperaMasks一般位于应用服务器lib目录内,或者位于Web应用的WEB-INF\lib目录内。位于应用服务器内部的好处是如果同一服务器上有多个OperaMasks应用可以共享同一组jar文件,从而节省硬盘空间并方便管理。位于Web应用的lib目录内的好处是不同的应用可以使用不同版本的OperaMasks,并且应用便于移植,只需将整个Web应用移到其它服务器即可运行。
下面分别对这两种情况下OperaMasks升级方法进行讲解(其中A—>B表示用A文件覆盖B文件,%AOM_HOME%表示解压后OperaMasks包的根目录,%APUSIC_HOME%表示Apusic服务器的根目录,%TOMCAT_HOME%表示Tomcat服务器的根目录,%WEB_ROOT%表示应用程序的根目录):
OperaMasks位于应用服务器lib目录内
如果应用服务器是Apusic Server:
%AOM_HOME%/lib/elite.jar —> %APUSIC_HOME%/lib/elite.jar %AOM_HOME%/lib/operamasks-comp.jar —> %APUSIC_HOME%/lib/operamasks-comp.jar %AOM_HOME%/lib/operamasks-core.jar —> %APUSIC_HOME%/lib/operamasks-core.jar %AOM_HOME%/lib/elite-api.jar —> %APUSIC_HOME%/common/elite-api.jar %AOM_HOME%/lib/operamasks-api.jar —> %APUSIC_HOME%/common/operamasks-api.jar 如果存在%APUSIC_HOME%/common/jsf-api.jar,删除它 如果存在%APUSIC_HOME%/lib/operamasks-impl.jar,删除它 如果存在%APUSIC_HOME%/lib/ext/operamasks-third-party.jar,删除它
如果应用服务器是Tomcat:
%AOM_HOME%/lib/elite.jar —> %TOMCAT_HOME%/lib/elite.jar %AOM_HOME%/lib/operamasks-comp.jar —> %TOMCAT_HOME%/lib/operamasks-comp.jar %AOM_HOME%/lib/operamasks-core.jar —> %TOMCAT_HOME%/lib/operamasks-core.jar %AOM_HOME%/lib/elite-api.jar —> %TOMCAT_HOME%/lib/elite-api.jar %AOM_HOME%/lib/operamasks-api.jar —> %TOMCAT_HOME%/lib/operamasks-api.jar %AOM_HOME%/lib/operamasks-options.jar —> %TOMCAT_HOME%/lib/operamasks-options.jar 如果存在%TOMCAT_HOME%/lib/jsf-api.jar,删除它 如果存在%TOMCAT_HOME%/lib/operamasks-impl.jar,删除它 如果存在%TOMCAT_HOME%/lib/operamasks-third-party.jar,删除它
如果应用服务器是其它支持的服务器(能够支持OperaMasks的Web容器列表参考第 1.4 节 “Apusic OperaMasks支持的Web容器”):请参考Apusic OperaMasks开源社区(www.operamasks.org) 。
OperaMasks位于Web应用lib目录内
%AOM_HOME%/lib/elite.jar —> %WEB_ROOT%/WEB-INF/lib/elite.jar %AOM_HOME%/lib/operamasks-comp.jar —> %WEB_ROOT%/WEB-INF/lib/operamasks-comp.jar %AOM_HOME%/lib/operamasks-core.jar —> %WEB_ROOT%/WEB-INF/lib/operamasks-core.jar %AOM_HOME%/lib/elite-api.jar —> %WEB_ROOT%/WEB-INF/lib/elite-api.jar %AOM_HOME%/lib/operamasks-api.jar —> %WEB_ROOT%/WEB-INF/lib/operamasks-api.jar %AOM_HOME%/lib/operamasks-options.jar —> %WEB_ROOT%/WEB-INF/lib/operamasks-options.jar 如果存在%WEB_ROOT%/WEB-INF/lib/jsf-api.jar,删除它 如果存在%WEB_ROOT%/WEB-INF/lib/operamasks-impl.jar,删除它 如果存在%WEB_ROOT%/WEB-INF/lib/operamasks-third-party.jar,删除它
由于3.0版本对2.3版本是不完全兼容的,所以如果工程开发时使用的是3.0之前的版本,现在要升级到3.0版本,需要对已有的代码做一些修改。3.x版本对3.0版本是兼容的,不需要做兼容性处理。
删除了ajax:renderGroup、layout:facelet、layout:faceletSet、layout:template几个不常的构件。
w:keyBinding的preventDefault属性改名为skipBrowserAction。
所有widget和layout构件均只工作在Ajax方式下(使用局部非Ajax提交方案来实现非Ajax提交)。
Ajax响应默认情况下只更新提交构件所在表单(w:form)中的UIInput与UIOutput构件数据值,局部更新导致在form外的数据不能及时更新,若需要更新form外的UIInput和UIOutput请参考第 21 章 页面局部更新;(如果原本的应用页面都是在一个form中,此升级可以跳过)。
layout构件的width和height支持百分比,所以width和height属性类型由原来的int变成了String,相应的setter方法仍然兼容,但getter方法返回类型已经改为String,如需要返回整型,则需要使用getWidthInteger或者是getHeightInteger方法(cell和panelGrid构件不支持百分比的width和height)。
使用@SaveState的页面只保存状态两分钟,如果需要长时间保存状态,则需要增加<ajax:conversationContext/>构件,时间是30分钟。
建议页面删除<!DOCTYPE HTML PUBLIC "" "">和<?xml version="1.0" encoding="UTF-8"?>,该标签会使IE进入一种标签异常模式,影响页面EditDataGrid中的editor的显示样式,同时也有可能影响其他样式。
可以将所有的ManagedBean由Session改为Request,具体可以参考文档第 15.5 节 “ConversationContext,Request和Session之间的会话上下文”。
构件渲染机制统一后,原有用户自定义的构件需要重要修改渲染过程,具体可以参考文档第 28 章 构件开发。