在本系列教程中,我们将通过一个小例子:Calculator,来体会一下Apusic OperaMasks 2.0的神奇魔力。
本文中,将围绕的例子如下图所示:
现在,就让我们开始 AOM 2.0的神奇之旅吧!
这个 LiteBean的基本代码如下:
@ManagedBean(scope = ManagedBeanScope.REQUEST)
public class CalcBean {
@Bind
private double first = 22.0;
@Bind
private double second = 7.0;
@Bind
private double result;
@Action
public void add() {
result = first + second;
}
@Action
public void subtract() {
result = first - second;
}
@Action
public void multiply() {
result = first * second;
}
@Action
public void divide() {
result = first / second;
}
}
上述代码的解释如下:首先,我们声明了3个成员变量,分别是:first、second 和 result,请注意,他们的命名,和页面中相关控件的 id 是一样的,并且,它们都有一个@Bind 的annotation。同时,我们也声明了四个方法,分别是:add、subtract、multiply 和 divide,同样的,它们的命名也和页面中的四个<w:button>的id保持一致,而且,它们也都有 @Action 的annotation声明。
现在,让我们运行一下这个页面,我们来看看,会发生什么情况?
哇,一切都OK了!我们要的功能已经全部具备了!
这是怎么回事?印象中,我们好像并没有指定输入参数的 label 是什么吧,好像也没有指定四个 button 的 value和action啊,AOM是怎么猜到我们想要让它做什么的?
记得一位朋友在向我介绍 Ruby on Rails时,对RoR的两个特性赞不绝口,一个是 Ruby 这种动态语言(AOM 2.0中的ELite绝不逊色于 Ruby),另一个就是“约定优于配置”(Convention Over Configuration) 这个原则。事实上,AOM 2.0 也将“约定优于配置”这条原则发挥得淋漓尽致。以上述代码为例:在页面中有个 <h:outputLabel for="first"/>,但我们并没有指定它的确切值,那么,AOM会认为,此label的值默认就是这个id,且首字母大写; <w:textField id="first"/> 并没有指定它的value,那么,AOM会自动到后台的 CalcBean 中,找出所有带有@Bind标注且名称为 first 的属性,该textField 的值就对应此属性;对于<w:button id="add"/>,AOM会找出所有带有@Action 标注且名称为 add 的方法,该 button 的 Action 就是此方法。
看上去很美,但是,这样一来,是否意味着我的代码会受到很多限制呢?譬如,我不想让成员变量名称为 first,那么,我该怎么办呢?
假如你希望将CalcBean中first属性的名称更改为 first2,你可以这样做:
@Bind(id="first")
private double first2 = 22.0;
假如你希望方法名不是 add,改成 plus,那么,你可以这样:
@Action(id="add")
public void plus() {
result = first + second;
}
假如你希望将 Add按钮的名称改为“Plus”,那么,你可以这样:
<w:button id="add" value="Plus"/>
等等,将业务数据与展现层绑在一起,这不是违反了IoVC的原则吗? 是,你说的对,那我们换个更好的做法,你可以这样:
@Bind(id="add", attribute="value")
private String addLabel = "Plus";
好像还有一点不对劲,仅仅为了显示一个Label,我有必要在 CalcBean 中再增加一个属性吗?你说的对,但这是咱们第二篇文章要介绍的内容了。
好了,我们只是简单的体会了一下 AOM 2.0 的一些新特性。文中所描述的计算器这个示例,在 AOM 2.0 中,只需要简单的十几行代码就轻松搞掂了。是不是非常省事?我记得我的老师袁红岗先生曾经跟我说过:聪明的程序员都是懒惰的。 无疑,AOM 2.0 是为“懒人”准备的,尤其是那些“懒惰的”、“聪明的”程序员们。
相关推荐
使用QTP的automation object model,可以对QTP进行自动化编程,从而自动对QTP... 如果要重复多次的完成同一项工作任务,或重复多次运行同一测试(或组件),或需要快速配置QTP选项,则QTP的自动化编程是非常有用的。
标题"AOM初体验(一)"以及描述中提到的工程打包下载,暗示了这是一个关于应用开发和集成环境的讨论,特别是涉及到AOM(可能是Apusic Application Object Model,一种中间件平台)的使用。标签"源码"和"工具"进一步...
什么是 AoM? AoM 是 Argentum Online 的改装平台。 阅读有关 AoM 的更多信息版权所有 (c) 2015 AoM Powered 执照AoM 在下获得 ,请参阅LICENSE文件了解详细信息。贡献AoM 是 100% 免费和开源的。 我们鼓励并支持...
在这个过程中,`aom-v1.0.0.errata.1.tar.gz`是一个重要的组件,它是Google开放媒体联盟(Alliance for Open Media, AOMedia)的AV1编码器开源实现——AOMedia Video 1(AV1)的一个版本。AV1是一种高效、开放标准的...
AOM(Academy of Motion Picture Arts and Sciences)是一个与电影技术相关的组织,而在此上下文中,它似乎指的是一个特定的Java项目或库。"AOM java原代码下载"的标题表明我们正在讨论的是该组织的Java源代码,可能...
综上所述,aom-v1.0.0.errata.1.tar.gz是一个包含了AOMedia Video 1开源项目1.0.0版本错误修复的资源包,其中包含了项目源代码的格式规范、变更记录、使用指南和文档生成配置,便于开发者理解和集成到自己的项目中。...
各位AOM的爱好者,AOM目前采用的默认EXT皮肤很漂亮,但是从1.0用到2.0再用到2.3,想必各位的项目都已经成熟稳定了,这时候很多人想锦上添花,让自己的项目更加出众一些,那就要在外观上做一些美化了。 遗憾的是,...
AOM 通过engine.vbs 启动UFT。
4. **测试数据**:一组视频序列,用于测试编码器的性能和质量,这些数据通常包括不同分辨率、帧率和复杂度的视频片段。 5. **编译和构建指南**:帮助用户在各种平台上编译和运行AOMedia库的说明文档。 6. **工具**...
本文将深入探讨“第二波又来了:AOM3.2之8款皮肤分享(for extjs3.31)”这个主题,这是一次针对AOM(Opera Masks)3.2版本发布的皮肤更新,特别设计以兼容ExtJS 3.3.1框架。 AOM,全称Antelope on the Moon,是一个...
标题 "aom-v1.0.0.errata.1.zip" 指示这是一个与开源视频编码库AV1相关的更新或修正文件。"errata"通常用于标识软件发布中的错误或修正,这意味着这个压缩包可能包含了针对aomedia(aom)v1.0.0版本的一些修复或改进...
标题 "aom.zip_3344aom_aom.avcom_av1_h264_zip" 暗示了这是一个与视频编码相关的压缩文件,其中包含了AV1编码器的源代码,可能还有与H264编码的对比或转换相关的资料。描述 "av1 codec source open c++" 明确指出这...
AOM金蝶控件开发指南,入门,供大家学习
总结来说,X-AOM权识区块链新经济项目致力于在AI时代创建一个投资多元化的解决方案,通过区块链技术打破传统经济模式,实现数据价值的公平分配,促进全球经济的健康发展。随着5G、大数据、AI等新型基础设施的建设,...
AOM(Accessibility Object Model)是一个新兴的Web标准,旨在增强网页的无障碍性。虽然这个主题并未直接提及AOM,但它暗示我们可能需要关注无障碍访问的实践,确保回车键的替代功能同样适用于屏幕阅读器和其他辅助...
它目前采用 Times New Roman 格式,边距为一英寸,包括提交 ID 标题,允许以块缩进斜体定义假设,并使用标准section 、 subsection和subsubsection LaTeX 命令正确格式化三个不同级别的 AOM 标题. 所有表格和图形都...