如何在java类中使用外部javascript函数

时间:2013-03-17 08:51:51

标签: java javascript

我有javascript文件(jalali.js),它有很多功能。 我想在我的java Web应用程序项目中调用其中一个函数(我的意思是somefile.Class文件)

我进行了一些研究,我找到了这两种方法:

    ScriptEngineManager factory = new ScriptEngineManager();
    ScriptEngine engine = factory.getEngineByName("JavaScript");
    engine.eval("print('Hello, World')");

但我无法理解如何调用我的js文件(jalali.js)以及如何调用我的函数

我将把函数详细信息代码放在这里(来自jalali.js)

    JalaliDate.gregorianToJalali = function(g_y, g_m, g_d)
    {
      g_y = parseInt(g_y);
      g_m = parseInt(g_m);
      g_d = parseInt(g_d);
      var gy = g_y-1600;
      var gm = g_m-1;
      var gd = g_d-1;
           ...
           ...

       return [jy, jm, jd];
    }

我想在我的java应用程序(MyClass.class)中使用该函数

public class TaskListModel extends BaseModel{
    private Date gDate;
    private String jalaliDate;


    public void setGDate(Date gDate) {
        this.gDate= gDate;
        this.jalaliDate =     Here i need call the js function ;
}

2 个答案:

答案 0 :(得分:1)

如果这是1.6 Java的Rhino引擎,那么你可以逐行评估jalali.js中的代码 - 通过文件的运行时保持engine的实例。然后,您可以执行以下功能:engine.eval("myfunction(arg1, arg2);");

我不确定你想要实现的目标

步骤1。阅读jalali.js文件的一行

第二步。 engine.eval()

步骤3。检查EOF是否 - 如果是,请转到步骤4,否则转到步骤1

步骤4。 engine.eval("your_function(arg1, arg2);");

答案 1 :(得分:0)

一个简单的解决方案是您读取整个文件并向其附加要进行的函数调用,并将修改后的内容传递给eval方法。所以传递给eval的最终内容将采用

的形式
//
script in your .js file
//
return functionInYourJs(arg1, arg2);

一旦读取文件,您可以对其进行缓存以避免重复读取磁盘。