Rhino:如何将字符串从Java返回到Javascript?

时间:2010-10-29 09:15:05

标签: java javascript string rhino

我如何使用Rhino从Java返回一个字符串到Javascript,当我使用时,我得到的是org.mozilla.javascript.JavaNativeObject

var jsString = new java.lang.String("test");

在我的js文件中。

这是正确的方法吗?

var jsString = String(new java.lang.String("test"));

目标是使用Java方法返回String对象,而不是像上面那样动态创建它。

5 个答案:

答案 0 :(得分:3)

通常,您可以调用Context.javaToJS将Java对象转换为Javascript中最接近的表示形式。但是,对于String个对象,该函数返回字符串本身而不需要包装它。因此,如果您总是返回一个字符串,则无需执行任何特殊操作。

答案 1 :(得分:2)

两者都可以,但先尝试或浏览rhino教程  https://developer.mozilla.org/en/Rhino_documentation

答案 2 :(得分:1)

关闭基元的包装,然后表达式中返回的值将是一个JS字符串:

Context cx = Context.enter();
cx.getWrapFactory().setJavaPrimitiveWrap(false);

答案 3 :(得分:0)

虽然在大多数情况下返回的Java String类型可以像JS代码中的JS String类型一样使用,但它没有相同的方法!

特别是我发现它不能用于传递给' stringify()'的JS对象。因为它没有toJSON()方法。

我找到的唯一解决方案是明确添加""在JS中,将Java String转换为JS String。我发现没有办法编写java方法直接返回一个好的JS字符串...(因为Context.javaToJS()没有转换Java字符串) 例如:

action="{{ route('login') }}" # form Submit action

答案 4 :(得分:0)

对我来说,这是犀牛的臭虫。 JavaScript内的s +“”技巧可以使用,但这是在Java端对其进行修复的快速补丁-在NativeJavaMethod.call()中的这一行之后

Object retval = meth.invoke(javaObject, args);

添加此检查将其转换为本地JavaScript字符串(即typeof返回“字符串”而非“对象”)

if (retval instanceof String) {
    return NativeJavaObject.coerceTypeImpl(String.class, retval);
}

这很重要,否则s.replace()会调用Java版本,因此“ h e l l o” .replace(“”,“”)就是错误的

https://github.com/mozilla/rhino/issues/638