3

我有 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 ;
}
4

2 回答 2

1

好吧,如果这是 Java 1.6 的 Rhino 引擎,那么您可以jalali.js逐行评估代码 -engine在文件的运行时保持实例处于活动状态。你也可以像这样执行函数:engine.eval("myfunction(arg1, arg2);");

我不确定您要达到的目标

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

第2步。engine.eval()线

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

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

于 2013-03-17T09:05:50.000 回答
0

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

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

可能一旦文件被读取,您就可以缓存它以避免重复的磁盘读取。

于 2013-03-19T07:55:50.980 回答