是否可以在Vaadin框架内使用jQuery?

由于Vaadin是一个Java Web应用程序框架,因此可以在Vaadin Java代码中插入jQuery javascript片段吗?

是的。

像这样创建自己的ApplicationServlet扩展类:

public class MyApplicationServlet extends ApplicationServlet { @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("\n"); super.writeAjaxPageHtmlVaadinScripts(window, themeName, application, page, appUrl, themeUri, appId, request); } } 

然后替换web.xml中的Vaadin servlet(默认为com.vaadin.terminal.gwt.server.ApplicationServlet ):

 com.example.MyApplicationServlet 

然后,您可以通过调用以下命令在代码中进行jQuery调用:

 MyApplication.getMainWindow().executeJavascript(jQueryString); 

您可以使用@JavaScript和@StyleSheet注释

 @StyleSheet({ /* * JQuery UI */ "vaadin://jquery/jquery-ui-1.9.2.custom/css/ui-darkness/jquery-ui-1.9.2.custom.min.css", }) @JavaScript({ /* * JQuery */ "vaadin://jquery/jquery-1.11.1.min.js", /* * JQuery UI */ "vaadin://jquery/jquery-ui-1.9.2.custom/js/jquery-ui-1.9.2.custom.min.js", }) public class MyUI extends UI { ... } 

执行:

 JavaScript.getCurrent().execute("...javascript code here...") 

小心使用较大的脚本。 通过vaadin注释添加javascript的性能非常差。 最好手动在html标头中注入脚本。

还有一个针对ApplicationServlet的定制:

 public class VaadinApplicationServlet extends ApplicationServlet { @Override protected void writeAjaxPageHtmlHeader(BufferedWriter page, String title, String themeUri, HttpServletRequest request) throws IOException { page.write(""); super.writeAjaxPageHtmlHeader(page, title, themeUri, request); } }