0

我试图从我的 Vaadin Portlet 中调用一个 javascript 函数。

假设我的项目中有一个 HTML 文件;

主页.html

<html>  
   ...  
   <script type="text/javascript">  
   ...  
   function foo(String msg)   
   {  
      alert(msg);  
   }  
   ...  
  </script>  
   ...  
</html>  

通过Vaadin 嵌入式浏览器嵌入在我的 Portlet 中的页面

如何从我的 java 应用程序中调用函数 foo(String msg)

我需要导入/读取 homepage.html 文件并调用它还是我必须做的其他事情?

4

3 回答 3

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

于 2012-07-20T08:30:41.423 回答
1

首先你需要得到脚本体;然后您可以用户javax.script.ScriptEngineManager解决您的问题javax.script.*
伪代码

import javax.script.*;
ScriptEngine engine = 
            new ScriptEngineManager().getEngineByName("javascript");
String script = getScript(path_to_html);
            engine.eval(script);
于 2012-07-20T06:51:25.487 回答
0

参考以下链接,这些提供了做你想做的事情的API,

http://www.ibm.com/developerworks/java/library/j-5things9/index.html

http://metoojava.wordpress.com/2010/06/20/execute-javascript-from-java/

于 2012-07-20T06:46:55.323 回答