如何从java发送和接收jxbrowser中的序列化对象

如何从java发送和接收jxbrowser中的序列化对象,java,jxbrowser,Java,Jxbrowser,我必须使用jxbrowser将一个序列化对象从java发送到javascript,我这样做 String json = objectMapper.writeValueAsString(value); JSValue window = browser.executeJavaScriptAndReturnValue("window"); window.asObject().setProperty(requestName, json); 据我所知,它将在全局窗口中将对象设置为requestName?

我必须使用
jxbrowser
将一个序列化对象从
java
发送到
javascript
,我这样做

String json = objectMapper.writeValueAsString(value);
JSValue window = browser.executeJavaScriptAndReturnValue("window");
window.asObject().setProperty(requestName, json);
据我所知,它将在全局窗口中将对象设置为
requestName
?是真的吗? 另一方面,我可以从java站点读取这个对象。这个代码可以吗

JSValue window = browser.executeJavaScriptAndReturnValue("window."+requestName);
T t = objectMapper.readValue(window.toString(), clazz))

提前感谢

大家好,这里有两个方面

Javascript执行上下文

JSValue可以是普通值或JavaScript对象

调用executeJavaScriptAndReturnValue后,执行上下文就完成了。您可以计算返回的对象。这个返回的对象可以是带有函数的Java脚本对象,在这种情况下,您可以访问它

假设您的JavaScriptObject有一个接受字符串的方法helloWorld

JSValue document = browser.executeJavaScriptAndReturnValue("myJavascriptObject");
JSValue write = document.asObject().getProperty("helloWorldMethod");
write.asFunction().invoke(document.asObject(), "To Me");
通过这种方式,我们将“To Me”字符串传递给HelloWorld方法

您还可以设置对象的属性,然后调用另一个方法。如果此方法使用此属性,则在下一次执行时将考虑该属性:

JSValue document = browser.executeJavaScriptAndReturnValue("myJavascriptObject");
JSValue write = document.asObject().getProperty("helloWorldMethod");
document.asObject().setProperty("shouldISayGoodByeInstead",true)
write.asFunction().invoke(document.asObject(), "To Me");

属性shouldSayGoodByEinstead将作为调用helloWorldMethod时发生的第二次执行的一部分进行评估,而不是在executeJavaScriptAndReturnValue的第一次执行过程中进行评估。

Hi这里有两个方面

Javascript执行上下文

JSValue可以是普通值或JavaScript对象

调用executeJavaScriptAndReturnValue后,执行上下文就完成了。您可以计算返回的对象。这个返回的对象可以是带有函数的Java脚本对象,在这种情况下,您可以访问它

假设您的JavaScriptObject有一个接受字符串的方法helloWorld

JSValue document = browser.executeJavaScriptAndReturnValue("myJavascriptObject");
JSValue write = document.asObject().getProperty("helloWorldMethod");
write.asFunction().invoke(document.asObject(), "To Me");
通过这种方式,我们将“To Me”字符串传递给HelloWorld方法

您还可以设置对象的属性,然后调用另一个方法。如果此方法使用此属性,则在下一次执行时将考虑该属性:

JSValue document = browser.executeJavaScriptAndReturnValue("myJavascriptObject");
JSValue write = document.asObject().getProperty("helloWorldMethod");
document.asObject().setProperty("shouldISayGoodByeInstead",true)
write.asFunction().invoke(document.asObject(), "To Me");

属性shouldSayGoodByEinstead将作为调用helloWorldMethod时发生的第二次执行的一部分进行计算,而不是在executeJavaScriptAndReturnValue的第一次执行期间进行计算。

如果我理解正确,您希望通过JSON设置JavaScript对象。这可以通过JSONString实现。您可以在此处查看示例:

之后,您需要获取JSON对象。对于这种情况,有一种方法

JSObject.toJSONString()
因此,如果我们以以下方式更改您的样品,它应该会按预期工作:

String json = objectMapper.writeValueAsString(value);
JSValue window = browser.executeJavaScriptAndReturnValue("window");
window.asObject().setProperty(requestName,  new JSONString(json));
JSValue window = browser.executeJavaScriptAndReturnValue("window."+requestName);
T t = objectMapper.readValue(window.asObject().toJSONString(), clazz))

如果我理解正确,您希望通过JSON设置JavaScript对象。这可以通过JSONString实现。您可以在此处查看示例:

之后,您需要获取JSON对象。对于这种情况,有一种方法

JSObject.toJSONString()
因此,如果我们以以下方式更改您的样品,它应该会按预期工作:

String json = objectMapper.writeValueAsString(value);
JSValue window = browser.executeJavaScriptAndReturnValue("window");
window.asObject().setProperty(requestName,  new JSONString(json));
JSValue window = browser.executeJavaScriptAndReturnValue("window."+requestName);
T t = objectMapper.readValue(window.asObject().toJSONString(), clazz))

谢谢你的回复。我真的很感激。但是我想在java和javascript之间发送一个简单的日期(DTO类)。我不想调用任何方法。我的想法是将对象从Java序列化为JSON,并将其发送到javascript,然后在全局窗口中接收对象。另一方面,我将javascript中的一个对象序列化为JSON,并将其发送到java。感谢您的回复。我真的很感激。但是我想在java和javascript之间发送一个简单的日期(DTO类)。我不想调用任何方法。我的想法是将对象从Java序列化为JSON,并将其发送到javascript,然后在全局窗口中接收对象。在另一个方向,我将javascript中的一个对象序列化为JSON并发送给java。