在OperaMasks中使用ELite和JRuby动态语言的秘笈
如何在OperaMasks中使用动态语言
- 1. 前言 2. 在OperaMasks中使用ELite
-
- 2.1. ELite的介绍 2.2. 在OperaMasks中使用ELite
- 3. 在JSF中使用Ruby
-
- 3.1. Spring2带来的动态语言支持 3.2. 在JSF应用中使用JRuby
- 4. 总结
1. 前言
- 动态语言与Java之间的交互
- IDE工具的支持
- Java开发者的学习曲线
- 可供选择的Web框架
- 社区的支持
- Java 2 Standard Edition (J2SE) 5.0 (JDK 1.5)或更高版本, 下载地址
- Apusic Application Server 5.1(内置有AOM2.0和ELite0.2)下载地址
- Apusic OperaMasks2.0(包含有Spring2.0和AOM的Spring插件)下载地址
- Apusic Studio 5.1M5 下载地址
- JRuby1.1.2 下载地址
2. 在Operamasks中使用ELite
2.1. ELite的介绍
2.2. 在Operamasks中使用ELite
xmlns:w="http://www.apusic.com/jsf/widget" xmlns:layout="http://www.apusic.com/jsf/layout"
xmlns:h="http://java.sun.com/jsf/html" renderKitId="AJAX">
<w:page title="Calculator">
<w:form id="calc" transient="true">
<layout:panelGrid columns="3">
<h:outputLabel for="first" />
<w:textField id="first" />
<h:message for="first" />
<h:outputLabel for="second" />
<w:textField id="second" />
<h:message for="second" />
<h:outputLabel for="result" />
<h:outputText id="result" />
</layout:panelGrid>
<br/>
<layout:panelGrid columns="4">
<w:button id="add" />
<w:button id="subtract" />
<w:button id="multiply" />
<w:button id="divide" />
</layout:panelGrid>
</w:form>
</w:page>
</f:view>
@Bind @Required second::double = 7;
@Bind @Pattern("#,##0.00") result::double;
@Action void add() => result = first + second;
@Action void subtract() => result = first - second;
@Action void multiply() => result = first * second;
@Action void divide() => result = first / second;
声明一个 double 的变量,语法形式是ELite语法,但同样可以任意的利用各种Java的annotation
|
|
用到了 @Pattern 的标注,用来指定数字的显示样式。你可以参考 AOM API文档。
|
|
声明一个@Action 方法,这个方法你还可以这样写:
|
result = first + second;
System.out.println("add method invoked");
}
<url-pattern>/calc_elite.xhtml</url-pattern>
<model-bean>/WEB-INF/scripts/calc_elite.elite</model-bean>
</view-mapping>
xmlns:w="http://www.apusic.com/jsf/widget" xmlns:layout="http://www.apusic.com/jsf/layout"
xmlns:h="http://java.sun.com/jsf/html" renderKitId="AJAX" xmlns:om="http://www.apusic.com/jsf/misc">
<om:elite>
<![CDATA[
@Bind @Required first::double = 22;
@Bind @Required second::double = 7;
@Bind result::double = 0;
@Action add()=> result = first + second;
@Action subtract() => result = first - second;
@Action multiply() => result = first * second;
@Action divide() => result = first / second;
]]>
</om:elite>
<w:page title="Calculator">
<w:form id="calc">
<layout:panelGrid columns="3">
<h:outputLabel for="first" />
<w:textField id="first" />
<h:message for="first" />
<h:outputLabel for="second" />
<w:textField id="second" />
<h:message for="second" />
<h:outputLabel for="result" />
<h:outputText id="result" />
</layout:panelGrid>
<br />
<layout:panelGrid columns="4">
<w:button id="add" />
<w:button id="subtract" />
<w:button id="multiply" />
<w:button id="divide" />
</layout:panelGrid>
</w:form>
</w:page>
</f:view>
3. 在JSF中使用Ruby
3.1. Spring2带来的动态语言支持
3.2. 在JSF应用中使用JRuby
<!DOCTYPE HTML PUBLIC "" "">
<f:view xmlns="http://www.w3.org/1999/xhtml" xmlns:f="http://java.sun.com/jsf/core"
xmlns:w="http://www.apusic.com/jsf/widget" xmlns:layout="http://www.apusic.com/jsf/layout"
xmlns:ajax="http://www.apusic.com/jsf/ajax" xmlns:h="http://java.sun.com/jsf/html"
renderKitId="AJAX">
<w:head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</w:head>
<w:page title="Insert title here">
<h:form>
<h:inputText value="#{myBean.text}"></h:inputText>
<h:commandButton action="#{myBean.click}" value="Submit"></h:commandButton>
You typed: #{myBean.text}
</h:form>
</w:page>
</f:view>
public String getText();
public void setText(String text);
public String click();
}
include_class 'jruby.IMyBeanController'
class MyBeanController
include IMyBeanController
@text = nil
def setText(text)
@text = text
end
def getText
@text
end
def save
puts @text
end
end
script-interfaces="jruby.MyBeanController"
script-source="classpath:jruby/MyBeanController.rb" scope="request">
</lang:jruby>
- 使用动态语言编写的Bean为了能与spring集成,需要实现一个Java接口。
- 对于后台Bean中的属性读写不够灵活
4. 总结
转载于:https://blog.51cto.com/javafans/84680
在OperaMasks中使用ELite和JRuby动态语言的秘笈相关推荐
- 在Silverlight 2 beta1中使用IronPython等动态语言
目前在Silverlight Tools Beta 1 for Visual Studio 2008 中包括了3个动态语言的运行库:IronPython.IronRuby和Managed JScrip ...
- python线上编辑问题_大型线上项目中动态语言诸多问题之二 -- 以 Python 语言为例...
第一个问题:Mutable对象被误改 这个是在线上环境出现过的一个BUG 事后说起来很简单,服务端数据(放在dict里面的)被意外修改了,但查证的时候也花了许多时间,伪代码如下: def routin ...
- 【Groovy】Groovy 动态语言特性 ( Groovy 中函数实参自动类型推断 | 函数动态参数注意事项 )
文章目录 前言 一.Groovy 中函数实参自动类型推断 二.函数动态参数注意事项 三.完整代码示例 前言 Groovy 是动态语言 , Java 是静态语言 ; 本篇博客讨论 Groovy 中 , ...
- 【Groovy】Groovy 动态语言特性 ( Groovy 中的变量自动类型推断以及动态调用 | Java 中必须为变量指定其类型 )
文章目录 前言 一.Groovy 动态语言 二.Groovy 中的变量自动类型推断及动态调用 三.Java 中必须为变量指定其类型 前言 Groovy 是动态语言 , Java 是静态语言 ; 一.G ...
- 【Android 逆向】Android 中常用的 so 动态库 ( 拷贝 /system/lib/ 中的 Android 系统 so 动态库 )
文章目录 一.拷贝 /system/lib/ 中的 Android 系统 so 动态库 一.拷贝 /system/lib/ 中的 Android 系统 so 动态库 将 Android 系统的 /sy ...
- 【转载】ABAP中数据和对象的动态创建和调用
ABAP中数据和对象的动态创建和调用 动态创建数据或者对象是指在程序运行过程中创建数据变量或者对象实例,我们可以用引用定义来创建数据变量,格式为: CREATE DATA gt_def TYPE ( ...
- 关系查询处理 查询优化 论文_每日论文33:关系数据库中的关键词查询结果动态优化...
每日论文 第三十三篇 2020/08/18 摘要: 关键词查询可以帮助用户从数据库中快速获取感兴趣的内容,它不需要用户掌握专业的数据库结构化查询语言,降低了使用门槛.针对基于关键词的数据库查询,基于数 ...
- 下面的语言中哪些语言是动态语言( )
下面的语言中哪些语言是动态语言(B ) A.C B.JavaScript C.C++ D.CSS E.Java F.Objective-C 解析 静态语言(强类型语言) 静态语言是在编译时变量的 ...
- c++对象回收string类型成员时coredump_本体技术视点 | 虚拟机中引用性动态语言对象模型思考...
1 引言 Ontology 的 NeoVM 虚拟机新增加了 DCALL.HAS_KEY.KEYS 以及 VALUES 等几条新的指令.因此,基于 NeoVM 的引用性动态语言对象的设计理论上可行,这可 ...
最新文章
- send和WSASend区别
- 玩转数据结构从入门到进阶三
- list中抽出某一个字段的值_使用LINQ获取List列表中的某个字段值
- 深入V8引擎-AST(2)
- 室内装修隐蔽工程验收知识拓展_装修之前先看知贤,『装修微课堂』室内装修隐蔽工程详解,装修小白防坑避雷手册!...
- mysql 存储 事务_MYSQL 可以在存储过程里实现事务控制吗
- 如何获取上传文件的本地路径
- dns是指网络域名系统_域名系统(DNS)是Internet的骨干。 这就是全部的运作方式。...
- 用python七巧板模型拼图形_用七巧板拼图形
- 纯Javascript实现Windows 8 Metro风格实现
- 中国女足3:2逆转!支付宝:1300万奖金已到位 蒙牛奖励千万现金
- java编译找不到符号_java编译时找不到符号,怎么处理
- QChart修改标题颜色,修改X轴Y轴字体颜色
- ROS中Plugin插件学习
- flutter doctor --android-licenses命令之后出现JAVA_HOME错误
- 20款简洁独特的logo设计
- ps入门教程、ps修图基本工具使用方法视频教学
- vue2.x版本要点(一)
- 简读《Head First设计模式》
- 如果金融男和IT男同时追你,你选谁?女孩的回答80%的人猜错了