簡體   English   中英

從Java內部以復雜對象作為參數調用JavaScript函數

[英]Call a JavaScript-Function from within Java with complex Objects as parameters

我有一個帶有方法(A)的Java應用程序,該方法應使用用rhino評估的javascript函數(B)來更改一些對象,然后再用A返回它們。重點是,從A內傳遞到B的參數很復雜(列表),並且從B返回的類型也應來自同一類型。 目前,我不知道如何在javascript函數中使用自己的類。 我該用JavaScript導入誰?

我使用rhino如何從Java調用js函數來加載和運行我的javascript函數。

提前致謝!

參見示例。 它使用jsr223,但是您會明白的。 我將帶有MyClass的一個實例的列表傳遞給Rhino,它對其進行了修改(通過java方法調用),最后向列表添加了另一個元素。

package lv.test;

import java.util.ArrayList;
import java.util.List;

import javax.script.Bindings;
import javax.script.ScriptContext;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;

public class MyClass {
    private int field;

    public int getField() {
        return field;
    }

    public void setField(final int field) {
        this.field = field;
    }

    public String toString() {
        return String.format("{%d}", field);
    }

    public static void main(String[] args) throws ScriptException {
        final ScriptEngineManager manager = new ScriptEngineManager();
        final ScriptEngine e = manager.getEngineByName("js");

        final Bindings b = e.getBindings(ScriptContext.ENGINE_SCOPE);

        final List<MyClass> somelist = new ArrayList<MyClass>();
        somelist.add(new MyClass());

        b.put("somelist", somelist);

        final StringBuilder script = new StringBuilder()
            .append("function abc(x,y) { return x+y+new java.lang.Integer(2).intValue(); }")
            .append("somelist.get(0).setField(abc(2,3));")
            .append("somelist.add(new Packages.lv.test.MyClass()); somelist.get(1).setField(888);");

        e.eval(script.toString());

        System.out.println(somelist); // [{7}, {888}]
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM