Java 可以在Vaadin框架内使用jQuery吗?

Java 可以在Vaadin框架内使用jQuery吗?,java,javascript,jquery,vaadin,Java,Javascript,Jquery,Vaadin,由于Vaadin是一个Java web应用程序框架,因此可以在Vaadin Java代码中插入jQuery javascript片段吗?是的 创建自己的ApplicationServlet扩展类,如下所示: public class MyApplicationServlet extends ApplicationServlet { @Override protected void writeAjaxPageHtmlVaadinScripts(Window window,

由于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("<script type=\"text/javascript\">\n");
        page.write("//<![CDATA[\n");
        page.write("document.write(\"<script language='javascript' src='./jquery/jquery-1.4.4.min.js'><\\/script>\");\n");
        page.write("//]]>\n</script>\n");

        super.writeAjaxPageHtmlVaadinScripts(window, themeName, application,
            page, appUrl, themeUri, appId, request);
    }
}
然后,您可以通过调用以下命令在代码中进行jQuery调用:

MyApplication.getMainWindow().executeJavascript(jQueryString);

ApplicationServlet的另一项自定义功能:

public class VaadinApplicationServlet extends ApplicationServlet {

    @Override
    protected void writeAjaxPageHtmlHeader(BufferedWriter page, String title, String themeUri, HttpServletRequest request) throws IOException {
        page.write("<script language='javascript' src='http://code.jquery.com/jquery-1.8.0.min.js'></script>");
        super.writeAjaxPageHtmlHeader(page, title, themeUri, request);
    }

}
公共类VaadinApplicationServlet扩展了ApplicationServlet{
@凌驾
受保护的void writeAjaxPageHtmlHeader(BufferedWriter页面、字符串标题、字符串themeUri、HttpServletRequest请求)引发IOException{
第页,写(“”);
super.writeAjaxPageHtmlHeader(页面、标题、主题、请求);
}
}

您可以使用@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标题。

我不明白为什么不,但我不明白为什么您要。。。当然,该框架允许独立的视图和控制器?该框架提供了使用本机js代码的自定义组件。然而,当我尝试一些复杂的js代码时,可能什么都没有发生。这就是我问这个问题的原因。在我尝试时,这行代码是:MyApplication.getMainWindow().executeJavascript(jQueryString);可能只适用于一些简单的javascript代码。它似乎不太支持更复杂的js代码。我不太了解jQuery,但至少在我的Vaadin应用程序中,它被Invent charts(基于Highcharts)使用。如果您在js文件中声明jQuery内容,将其放入页面标题(如jQuery.js)并使用executeJavascript调用函数,这对您有用吗?此外,您是否检查(w/firebug或类似)jQuery库是否已成功加载?我还使用了invent图表。它对我很有效。我需要jQuery来实现一些Vaadin没有提供的其他组件。如何从Vaadin服务器端与客户端通信的问题。您能否提供一个您试图实现的示例?您所说的“如何从Vaadin服务器端与客户端通信的问题”是什么意思?文件(例如,
/jquery/…
)指向何处?项目中的哪个文件夹?文件进入应用程序的“VAADIN”文件夹,可通过“VAADIN://”url访问该文件夹
JavaScript.getCurrent().execute("...javascript code here...")