Я использую Носорога Mozilla эмулятор JavaScript. Это позволяет мне добавлять методы Java к контексту и затем называть их, как будто они были функциями JavaScript. Но я не могу заставить это работать кроме тех случаев, когда я использую статический метод.
Проблемой является эта часть документации:
Если метод не будет статическим, Java, то 'это' значение будет соответствовать JavaScript 'это' значение. Любая попытка вызвать функцию с 'этим' значением, которое не имеет правильного типа Java, приведет к ошибке.
По-видимому, мой Java, "это" значение не соответствует тому в JavaScript и я понятия не имею, как заставить их соответствовать. В конце я хотел бы создать экземпляр в Java и установить несколько методов от него в глобальной области видимости, таким образом, я могу инициализировать экземпляр от Java, но использовать его в моих сценариях.
У кого-либо есть некоторый пример кода для этого?
Что вы можете сделать, так это привязать экземпляр Java к контексту Javascript, а затем из Javascript этот идентификатор будет ссылкой на «настоящий» объект Java. Затем вы можете использовать его для вызова методов из Javascript в Java.
Сторона Java:
final Bindings bindings = engine.createBindings();
bindings.put("javaObject", new YourJavaClass());
engine.setBindings(bindings, ScriptContext.ENGINE_SCOPE);
Javascript:
javaObject.methodName("something", "something");
Теперь в этом примере предполагается, что вы используете API-интерфейсы JDK 6 java.util.script для переключения между Java и Rhino. От "простого" Rhino он немного отличается, но основная идея та же.
В качестве альтернативы вы можете импортировать классы Java в среду Javascript, и Rhino предоставит вам ссылки домена Javascript на объекты Java, когда вы используете Javascript «новый» для ссылок на классы Java.