0

我正在尝试在 JRuby 和 Java 应用程序之间创建一个混合体,以便可以一次迁移单个组件。我现在要做的非常简单,这里是 Ruby 类:require 'java'

java_package 'eu.netprophecy.test'

class RubyViewModel
  java_signature 'String getGreeting()'
  def getGreeting
    puts "Hello, ZK, from Ruby!"
  end
end

我希望能够从 ZK 项目中使用此视图模型:

<?page title="Hello, Ruby!" contentType="text/html;charset=UTF-8"?>
<zk>
<window title="Hello Ruby!!" border="normal" width="200px"     apply="org.zkoss.bind.BindComposer"
    viewModel="@id('vm') @init('eu.netprophecy.test.RubyViewModel')">

<label value="@load(vm.greeting)"/>

</window>
</zk>

我尝试使用 .class 创建一个 jar marbler,但是它将带有 java 字节码的 .class 文件放在前面有项目名称的目录中,弄乱了预期的包结构(在这种情况下,我得到 EJB/eu/netprophecy/test/RubyViewModel,这意味着我无法在 Java 代码中使用生成的 Java 类)。

有谁知道这是否可能,是否有更好的方法,或者我是否必须手动创建 jar?

4

1 回答 1

0

您需要从您的 ruby​​ 类生成一个 java 类,这完全有可能(即使没有预编译)become_java!,只需确保在呈现视图(或编译)之前执行 ruby​​ 脚本我不确定你在使用什么)。

class RubyViewModel
  java_signature 'String getGreeting()'
  def getGreeting
    puts "Hello, ZK, from Ruby!"
  end
end

require 'jruby/core_ext'
RubyViewModel.become_java! # returns a java.lang.Class

您可以使用以下方法检查方法是否存在(java方式):

RubyViewModel.java_class.getDeclaredMethods.map { |method| method.to_s }
于 2012-05-31T18:53:36.097 回答