我试图用我的Vaadin Portlet调用javascript函数。
假设我的项目中有一个HTML文件;
homepage.html
<html>
...
<script type="text/javascript">
...
function foo(String msg)
{
alert(msg);
}
...
</script>
...
</html>
在我的Portlet中嵌入的页面
如何从我的java应用程序中调用函数foo(String msg)
我是否需要导入/阅读homepage.html文件并调用它,或者我需要做些什么?
答案 0 :(得分:1)
首先你需要获得脚本体;
然后您可以使用javax.script.ScriptEngineManager
来解决您的问题javax.script.*
伪代码
import javax.script.*;
ScriptEngine engine =
new ScriptEngineManager().getEngineByName("javascript");
String script = getScript(path_to_html);
engine.eval(script);
答案 1 :(得分:1)
将外部javascript文件包含到Vaadin应用程序中的最简单方法是覆盖Application#writeAjaxPageHtmlVaadinScripts
方法。
要从Vaadin服务器端代码调用javascript函数,请调用Window#executeJavascript
@Override
protected void writeAjaxPageHtmlVaadinScripts(Window window,
String themeName, Application application, BufferedWriter page,
String appUrl, String themeUri, String appId,
HttpServletRequest request) throws ServletException, IOException {
page.write("<script type=\"text/javascript\">\n");
page.write("//<![CDATA[\n");
page.write("document.write(\"<script language='javascript' src='" + appUrl + "/VAADIN/scripts/example.js'><\\/script>\");\n");
page.write("//]]>\n</script>\n");
super.writeAjaxPageHtmlVaadinScripts(window, themeName, application,
page, appUrl, themeUri, appId, request);
}
注意:我从未使用Vaadin作为Portlet,但快速浏览表明这应该可行。
然而,这种方法相当简陋,只适用于快速破解/概念验证:如果你想要更复杂的东西,那么开发你自己的Vaadin小部件就是正确的方法。它为您提供GWT和JSNI的强大功能,并为您提供更精细的控制:有关更多详细信息,请参阅The Book Of Vaadin。
答案 2 :(得分:0)