3

多くの機能を持つjavascriptファイル(jalali.js)があります。Java Web アプリケーション プロジェクトでこの関数の 1 つを呼び出したい (somefile.Class ファイルを意味する)

私はいくつかの調査を行い、次の2つの方法を見つけました。

    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

これが 1.6 Java の Rhino エンジンである場合は、コードを 1jalali.js行ずつ評価しengineて、ファイルの実行時に のインスタンスを維持することができます。また、次のように関数を実行できます。engine.eval("myfunction(arg1, arg2);");

あなたが何を達成しようとしているのかわからない

ステップ1。jalali.jsファイルの 1 行を読み取る

ステップ2。engine.eval()この線

Step3. EOF かどうかを確認します - はいの場合は Step4 に進み、そうでない場合は Step1 に進みます

Step4.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 に答える