java - 如何从 JavaScript 调用 Griffon 小程序中的函数?

标签 java javascript groovy applet griffon

我们有一个基于 Web 的项目,但需要对用户的文件系统有大量访问权限。 HTML(还)不允许我们进行足够的访问,并且由于我们主要是一家 Grails 商店,因此将文件访问代码作为小程序比将其作为 Flash 代码更有意义。

我们已经接触过一些 Griffon(该项目之前的原型(prototype)是 100% Griffon Webstart 应用程序),并且喜欢 Griffon 为小程序提供的结构和“样板文件删除”。然而,我们不断遇到的问题是将 Html/JavaScript UI 连接到实际上完成所有工作的 Griffon 小程序。

我们找到了 James Williams 的 excellent example从 Griffon 应用程序调用 JavaScript 函数,但尚未找到相反的示例:从 JavaScript 端调用 Griffon 函数。

主要问题是我们希望 Griffon 应用程序“ headless ”(或尽可能接近),因为所有 UI 都将由 JavaScript 和 HTML 处理。这意味着我们无法使用 Griffon 应用程序内触发的 UI 事件,就像 James 在他的示例中所做的那样。

有谁有 JavaScript 与 Griffon 小程序交互的示例可供我们学习吗?或者关于如何将 Griffon 小程序中的内容呈现给 JavaScript 有什么建议吗?

最佳答案

听起来您想使用 JavaScript 从外部世界调用在 Applet 中找到的 Java(或 groovy!)函数,对吗?

为了使其发挥作用:

  1. 必须启用 livescript,并且必须对小程序的 jar 进行签名

  2. 下一步是在小程序子类中定义一个入口点,该入口点知道如何处理您想要进行的调用

    这就是棘手的地方,因为默认的 applet 类是 griffon.swing.SwingApplet,因此您必须创建自己的 griffon.swing.SwingApplet 子类并使用它作为主要入口点。

    您的子类将定义可从 JavaScript 端调用的方法。这应该是这样的:

    import griffon.swing.SwingApplet;  
    
    public class MySwingApplet extends SwingApplet {
        // match superclass constructors
        public CalculatorApplet(String[] args) {  
            super(args);  
        }  
    
        public Object myAppletMethod(String[] args) {
            // args come form the JS world
            // do whatever is necessary here
        }
    }
    
  3. 告诉 Griffon 使用我们的自定义小程序子类而不是默认子类,只需创建一个名为 griffon-app/scripts/_Events.groovy 的文件并放置里面有以下内容:

    eventPackageAppStart = {  
        griffonAppletClass = 'calculator.CalculatorApplet'  
    }
    
  4. 最后,从 javascript 获取 applet 对象,并使用您认为合适的任何值调用 myAppletMethod():

    <script>  
        function talkToApplet() {
            var r = document.applets.myAppletId.myAppletMethod("arg1", "arg2");  
            alert(r);
        }
    </script>
    

一个more detailed example可以在 my blog 上找到.

关于java - 如何从 JavaScript 调用 Griffon 小程序中的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17598609/

相关文章:

java - 将 JScrollPane 添加到 JTable 不显示

JavaScript - Math.floor(Math.random()) - 重新定位 <img> 元素

JavaScript obj.constructor 与 obj.[[Prototype]] 的构造函数

jenkins - 工作流/管道插件中的访问阶段结果

matlab - 用于在 JVM 上进行富有表现力的、功能丰富的数值计算的工具

Groovy 相当于 OCL forAll

java - Java 5/6 中注解的注解

java - 将反斜杠视为普通字符的一种方法

java - 一个关于ubuntu中java和环境变量的简单问题

JavaScript 访问对象