Apusic OperaMasks V2.3在修复众多bug,最大保持向前兼容性的基础上,为提升用户体验,在很多方面作了改进。本文将就该版本的新特性进行详细的介绍:
1.提供统一的事件处理接口,提供更丰富的事件上下文
V2.3现在提供方式给一个组件添加AjaxAction事件,分别是EL方式,IoVC方式和编程方式。
-
EL方式
页面代码:
<w:textField jsvar="field">
<ajax:action event="onchange" action="#{bean.action }">
</ajax:action>
</w:textField>
LiteBean代码:
public void action(FieldChangeEvent event) {
System.out.println(event.getOldValue());
System.out.println(event.getNewValue());
}
-
IoVC方式
页面代码:
<w:textField id="field"></w:textField>
LiteBean代码:
@Action(event="onchange", id="field")
private void fieldAction(FieldChangeEvent event) {
System.out.println(event.getOldValue());
System.out.println(event.getNewValue());
}
-
编程方式
页面代码:
<w:textField id="field">
</w:textField>
LiteBean代码:
@Bindprivate UITextField field;
public void action(FieldChangeEvent event) {
System.out.println(event.getOldValue());
System.out.println(event.getNewValue());
}
@BeforeRender
public void beforeRender(boolean isPostback) {
if(!isPostback) {
field.getAjaxEventHandler().addElBinding("onchange", "#{bean.action}", false); }}
v2.3自定义了很多强类型事件比如 RowSelectEvent, FieldChangeEvent,方便用户直接通过事件上下文参数获取参数。
2. 更灵活的客户端校验方案
-
用户可自定义客户端校验的触发时机
属性validateBeforeSubmit可用来设置表单提交时是否进行客户端校验,属性validateEvents可用来设置校验触发的事件。如下
<w:form clientValidate="true" validateEvents="onchange, onfocus" validateBeforeSubmit="false">
<w:textField required="true">
<f:validateLength minimum="3" maximum="6">
</f:validateLength>
</w:textField>
</w:form>
-
ajax:clientValidator增强
在ajax:clientValidator中除了可返回boolean类型,还可以返回String类型,如果返回String类型,那么该String将作为错误信息展现。
<w:form>
<w:textField id="username">
<ajax:clientValidator>
if (value == 'admin')
return "admin为系统预留账户,不可注册!";
if (value == 'guest')
return "guest已被注册,请选用其他账户!";
return true;
</ajax:clientValidator>
</w:textField>
</w:form>
-
使用JavaScript代码触发校验
为构件声明一个"jsvar"属性,然后可用JavaScript代码使其进行校验,如
<w:form clientValidate="true" onsubmit="return field.validate()">
<w:textField jsvar="field" required="true">
<f:validateLength minimum="3" maximum="6">
</f:validateLength>
</textField>
</w:form>
3.统一的资源处理机制,方便用户扩展
-
资源依赖关系定义及引用
静态资源包括js,css,flash等的依赖关系在类路径中META-INF/resource/resource-dependences.xml文件中描述。 如有需要用户可以自行定制自己的资源依赖关系。如下
<resource>
<packages type="js">
<package name="Ext.ux.scrolledTabPanel" file="/ext/ux/scrolledTabPanel.js">
<requires name="Ext.Layout">
</requires>
</package>
</packages>
<packages type="css">
<package name="Ext.ux.scrolledTabPanel" file="/ext/skin/${skin}/yuiext/css/scrolledTabPanel.css">
</package>
</packages>
</resource>
在组件渲染类中即可引用定义的资源:
@ExtClass("Ext.ux.TabPanel")
@DependJSPackages("Ext.ux.scrolledTabPanel")
@DependCSSPackages("Ext.ux.scrolledTabPanel")
public class ScrolledTabLayoutRenderHandler extends TabLayoutRenderHandler {...}
-
皮肤制作及使用
META-INF/resource/skins.xml文件用于定义组件外观皮肤,如下
<skins>
<skin id="black" file="/ext/skin/black/yuiext/css/xtheme-black.css">
<displayName><![CDATA[Black]]></displayName>
<displayName locale="zh_CN"><![CDATA[Black]]></displayName>
<authorName><![CDATA[Ext JS - JavaScript Library]]></authorName>
<authorEmail><![CDATA[jack.slocum@yahoo.com]]></authorEmail>
</skin> ......</skins>
然后相对于META-INF/resource放置相关资源,就可以直接使用了。
4.易用的组件热键支持
添加ajax:keyBinding用于为组件添加热键绑定
<w:textField fieldLabel="TextField">
<ajax:keyBinding key="A" action="#{testKeyBindingBean.show }" alt="true" />
</w:textField>
<w:form>
<w:button value="submit" jsvar="btn" />
<ajax:keyBinding target="document" key="F7" clientScript="btn.fireEvent('click');" />
</w:form>
<ajax:keyBinding target="document" key="F8,N1,1,B,C" action="#{testKeyBindingBean.submit }" clientScript="return confirm('确认提交?');" />
5.组件工程支持
Apusic组件工程旨在为开发OperaMasks原生组件提供开发期的支持,这其中包括:
-
工程的创建和导出
-
外部和内置OperaMasks类库管理
-
资源和组件编辑器支持
-
组件Handler类动态生成支持
-
Web编辑器动态加载支持

6.更多的组件模板支持
提供了更多的面向OperaMasks的内容辅助模板支持,可以在Web Page Editor中通过代码辅助使用这些模板,在模板内支持通过Tab键切换到组件的各个属性,使开发OperaMasks应用更为方便快捷,并可随时进行模板的定制和导入/导出
7.Web开发功能增强
针对OperaMasks Studio V6.0发布后反馈的情况,在V6.1版本中,对Web开发功能进行增强,其其中包括:
- 关于拖组件<c:choose>时的代码增强
- 为DrawImage组件添加IoVC支持
- 为h:outputLabel value属性提供可视化支持
- pagingLink属性栏增强
- 其他特性....
8.HQL Editor功能增强
针对在日常开发期中,Hibernate 配置文件(cfg)或实体(entity)、实体配置文件(hbm)对比的情况,在V6.1版本中,HQL Editor能自动感知该特征文件的变化,从而进行动态加载,而无需手动进行刷新。如下图:
