`
apusiczhang
  • 浏览: 16928 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

如何在Operamasks中使用ELite和JRuby两种动态语言?

阅读更多

随着微软正式发布IronPython,推出基于第一款基于动态语言的开源编程工具;紧接着Sun又正式对外宣布收购JRuby,Ruby将成为JVM支持的第一个动态语言,动态语言一直围绕在我们的身边。如何使用动态语言给我们编写Java Web UI带来帮助?什么样的动态语言能够适合Java开发团队呢?SirsiDynix的架构师Travis Jensen通过五条粗略的标准来评估Groovy,JRuby,Jython这三种动态语言在Java上的表现。

  • 动态语言与Java之间的交互

  • IDE工具的支持

  • Java开发者的学习曲线

  • 可供选择的Web框架

  • 社区的支持

而由此得出的结论是Groovy将是在Java Web开发中最适合的动态语言。在这也不对这些评价多做议论,简单的结合AOM这个JSF的实现,介绍一下几种动态语言在Java Web开发中的使用。在熟悉AOM的过程中,发现了ELite这种新的动态语言,由于ELite与AOM属于同一个开发团队的产品,对于这两者的配合使用也一并做了一个示例。

在进行以下内容的同时,需要对使用的开发环境做一个简单的介绍:

至于对PATH或者JAVA_HOME等进行设置,这里就不一一馁述了,

由于AOM中内嵌有ELite的支持,所以在使用AOM作为Web框架开发的应用中可以很方便的使用ELite这种动态语言,不管是在xhtml页面中直接当作EL表达式来使用,或者在后台Bean中直接使用ELite编写,都是非常自然和可靠的选择。

ELite本身是一个可以独立运行的动态语言引擎,如何单独使用ELite可以参见http://aom.group.iteye.com/group/blog/170038的介绍。而在AOM中使用ELite是非常简单的一件事情,建立一个Apusic 标准工程,给当前工程添加一个带有AOM支持的web模块,这个时候就可以在这个工程中使用ELite了。具体的Apusic Studio以及Apusic工程的介绍,请参见http://www.operamasks.org/articles/studioProject/html_single等系列文章。通过一个简单的示例,讲解一下如何在AOM中使用ELite来进行Web应用的开发,希望能让读者对ELite的使用有一个初步的了解。

在WebContent目录下新建一个Facelets文件calc_elite.xhtml

<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: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>

 

在 WEB-INF/scripts 里面有一个 calc_elite.elite 的文件,代码示例如下:

@Bind @Required first::double = 22;
@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;

 

1

声明一个 double 的变量,语法形式是ELite语法,但同样可以任意的利用各种Java的annotation

2

用到了 @Pattern 的标注,用来指定数字的显示样式。你可以参考 AOM API文档。

3

声明一个@Action 方法,这个方法你还可以这样写:

@Action void add()      {
  result = first + second;
  System.out.println("add method invoked");
}

 

那么,calc_elite.xhtml 与 calc_elite.elite 是怎样关联起来的呢?在 operamasks.xml 中进行声明:

<view-mapping>
  <url-pattern>/calc_elite.xhtml</url-pattern>
  <model-bean>/WEB-INF/scripts/calc_elite.elite</model-bean>
</view-mapping>

 

如果觉得在 operamasks.xml 中进行配置很繁琐,那么,还可以这样:在页面中通过<om:elite>标签,将 ELite 代码片断放在其中。

<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: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>

 

这个例子只是简单的介绍了一下ELite 在 AOM 中的应用,ELite能给使用者带来的绝对不仅仅是这些,希望 ELite 能够成为您的另外一种奇妙的选择。

作为时下流行的动态语言Ruby来说,ROR(Ruby On Rails)的兴起让Ruby的风头在快速开发中独占鳌头。简单快捷,完全的面向对象是Ruby的特点,而随着JRuby的推出,在JVM上运行Ruby程序也已经成为现实,那么在使用JSF进行开发的过程中,是否也能使用Ruby这种快捷的动态语言呢?

由于AOM本身也就是一个JSF实现,所以在这里就偷个懒,直接将AOM当作一个普通的JSF来进行JRuby使用的示例环境了。同样在Apusic Studio中建一个Apusic标准工程,给当前工程添加一个Web模块,工程和Web模块的相关配置这里也就不详细介绍,有兴趣的朋友可以通过http://www.operamasks.org去了解工具的一些使用细则。在AOM中使用Spring非常简单,下载的AOM产品包下包含有Spring2.0以及AOM对Spring支持的插件,只需要将这些jar包加入到工程的Build Path中就可以了。目前最新的Apusic Studio已经提供了Spring IDE的支持,可以很方便的在工具中给当前工程添加Spring的依赖,即刻通过下载最新的Apusic Studio来体验一下吧。

在WebContent目录下新建一个Facelets文件jruby.xhtml

<?xml version="1.0" encoding="UTF-8"?>
<!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>

 

在这个页面中引用的后台Bean的名称为“myBean”,在AOM中可以很方便的用Java来编写这个Bean,但在这里不是我们的目的,我们将用JRuby来实现这个后台Bean。

为了使用Ruby实现这个后台Bean,我们需要一个spring-jruby的接口,在web/src的jruby包下新建一个接口IMyBeanController

public interface IMyBeanController {  
  public String getText();  
  public void setText(String text);  
  public String click();  
}  

 

同样在web/src的jruby包下新建一个MyBeanController.rb文件,以下是实现这个接口的Ruby代码

require 'java'  
    
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  

 

最后一步是在WEB-INF目录下的Spring的配置文件applicationContext.xml中定义这个后台Bean

<lang:jruby id="myBean"  
 script-interfaces="jruby.MyBeanController"  
script-source="classpath:jruby/MyBeanController.rb" scope="request">  
</lang:jruby> 

 

在这个用动态语言定义的后台Bean中,也可以使用scope属性来定义它的作用域,这个示例中我们使用的是“request”作用域。为了能在JSF的后台Bean中使用通过Spring配置的Bean,我们需要Spring-Jsf的配合使用,关于这方面的介绍在http://www.operamasks.org/articles/magic-6/html_single这篇文章中有很详细的介绍,在这里我们重点放在如何使用JRuby上。当然通过这种方式,我们也可以将在这里选用的动态语言改为Groovy或者BeanShell,而Groovy与Java语言的紧密性,使得Groovy在Java程序中的使用更为简单,这里之所以没有选用Groovy来做示例,完全是出于随机性,由于Spring对这几种动态语言的兼容,使得示例选择的语言变的不那么关键。

使用动态语言编写JSF的后台Bean的这种方式很有趣也很灵活,但还是有一些缺点让人觉得无奈

  • 使用动态语言编写的Bean为了能与spring集成,需要实现一个Java接口。

  • 对于后台Bean中的属性读写不够灵活

然而使用动态语言编写后台Bean带来的好处也是显而易见的,例如修改Bean的内容后可以不用重启应用或者重新部署应用,这个好处让你眼前一亮了吧。关于如何在其他的JSF实现中使用JRuby,相信读者都已经有一个清晰的思路了。

评论

相关推荐

    operamasks官方jsf教程

    **OperaMasks** 是一个专为Opera浏览器设计的JSF组件库,它扩展了JSF的功能,使得在Opera中使用JSF应用更加顺畅。 **教程概述:** "operamasks官方jsf教程"是针对初学者的一个资源,旨在介绍如何使用JSF和...

    operamasks-ui-2.0-doc

    1. **安装与配置**:如何在开发环境中安装和配置Operamasks UI 2.0,包括设置开发工具、依赖库的安装和项目结构的解析。 2. **API 接口**:详细说明Operamasks提供的JavaScript API,这些API使得开发者能够集成钱包...

    OperaMasks查询、模糊查询、源码

    1. **模板引擎**:OperaMasks使用模板语言来定义界面结构,使开发者可以轻松地将数据动态渲染到页面上。 2. **双向数据绑定**:框架支持模型与视图之间的双向数据绑定,当数据发生变化时,界面会自动更新,反之亦然...

    operamasks安装包

    5. 完成上述步骤后,OperaMasks应该已经成功安装并可以在浏览器中使用。 在使用过程中,用户可以根据自己的需求调整operamasks-options.jar中的设置,或者利用operamasks-api.jar提供的接口与其他软件或扩展进行...

    operamasks-ui 帮助文档

    只是我在网上找的 operamasks-ui api 文档 , 希望对你们有帮助

    operamasks-sdk_3.2

    1. **集成能力**:Operamasks SDK 3.2 提供了与金蝶中间件系统的无缝对接,使得开发者能够轻松地在自己的应用程序中整合金蝶的各项服务,如数据管理、工作流控制等。 2. **API接口**:SDK 包含了一套完整的API接口...

    operamasks-ui-2.1-demo

    在这个项目中,readme.txt可能会详述如何运行和测试OperaMasks UI 2.1的演示版本,以及如何在自己的项目中集成这个UI框架。阅读这个文件是了解和开始使用该框架的第一步。 而"operamasks-ui.war"文件是一个Web应用...

    OperaMasks快速进阶

    同时,OperaMasks还结合了动态语言ELite、集成开发环境OperaMasks Studio以及与Spring、Hibernate等成熟框架的紧密集成,极大地提升了Web开发的效率和体验。 **1. OperaMasks基本框架介绍** OperaMasks是一个开箱即...

    operaMasks_studio应用手册

    通过本文的介绍,我们不仅了解到了operaMasks_studio的基本概念及其在JSF开发中的作用,而且还深入探讨了其主要功能和使用方法。作为一款专门为JSF量身打造的开发工具,operaMasks_studio凭借其强大的功能和易用性,...

    operamasks-faces_1.0

    从标签"faces"和"operamasks"我们可以推断,这个包可能包含了一些定制化的图形元素,尤其是与人脸相关的图案,这些图案可能用于聊天、社交媒体或者在Opera浏览器的特定功能中。 在“operamasks-faces_1.0”这个...

    operamasks-ui

    "Operamasks-UI" 是一个专为Opera浏览器设计的用户界面增强插件的源代码包,其版本为1.2,存储在一个名为"operamasks-ui-1.2.zip"的压缩文件中。这个插件的目标是提供更加个性化、高效且易用的浏览体验。在了解这个...

    operamasks整合spring、hibernate实现grid增删改查

    在本项目中,OperaMasks被用作前端数据展示的工具,特别是在实现Grid时,它可以提供分页、排序、过滤等功能,使得用户可以方便地查看、编辑和管理大量数据。 Spring框架是Java企业级应用开发的事实标准,它提供了一...

    扩展OperamasksUI的grid的排序和显示detail属性

    在IT行业中,扩展和定制用户界面(UI)是常见的需求,特别是在Web开发中。这篇博客“扩展OperamasksUI的grid的排序和显示detail属性”显然聚焦于如何增强Operamasks UI框架的功能,特别是其grid组件。Operamasks UI...

    operamasks2.1整合spring、hebernate实现grid增删改查

    标题“operamasks2.1整合spring、hebernate实现grid增删改查”涉及到的是一个Web开发项目,其中使用了OperaMasks 2.1、Spring和Hibernate三大技术框架来构建一个具备数据操作功能(CRUD:创建、读取、更新、删除)的...

    operamasks-ui-2.0.zip

    LGPL允许开发者在自己的项目中使用此库,即使这些项目不是开源的,但需要提供源代码访问。而MIT License则更为宽松,基本允许自由使用、复制、修改和分发,只要包含原始版权和许可声明即可。 2. development-bundle...

    operamasks_ui

    OperaMasks UI的标签功能可能包括动态添加和删除标签,以及通过拖放等方式进行排列和组织。 "ui"标签则意味着这是一个用户界面相关的工具或框架,它关注的是交互设计和视觉呈现,确保用户能够直观、舒适地与应用...

    operamasks-ui-2.0-demo--.zip

    6. **图像和图标**:UI设计中可能使用的图形资源,如按钮、图标等,这些可能包含在SVG、PNG或JPEG格式中。 7. **README文件**:通常提供安装指南、快速入门教程和项目相关信息,帮助开发者更好地理解和使用这个Demo...

Global site tag (gtag.js) - Google Analytics