14

我有3个问题:

  1. Vaadin 中的每一个动作都会调用服务器。有没有办法避免每次操作都调用服务器?就像在客户端有一个代码用于多次使用的特定操作?就像在 CSValidation 附加组件中一样。

  2. 我想知道如何在 Vaadin 7 中添加 Javascript/JQuery。在 Vaadin 6 中似乎很容易。但是,我无法在 Vaadin 7 中使用它。我希望他们现在可以让它变得更容易。谁能给我看一些关于这个的例子。如果是 JQuery,对我有很大帮助。

  3. 而且还会

    Javascript.getCurrent().execute("");

在代码中“执行 javascript”或“添加指定脚本”。这会帮助我解决我的第二个问题吗?

4

2 回答 2

16

1) Vaadin 中的每一个动作都会调用服务器。有没有办法避免每次操作都调用服务器?就像在客户端有一个代码用于多次使用的特定操作?就像在 CSValidation 附加组件中一样。

这取决于客户端代码。Vaadin 是使用服务器端编程模型构建的,但是如果您需要限制服务器调用的数量,则需要您自己进行。Vaadin 7 使包含第三方库变得相对容易,就像在 Vaadin 6 中一样。

2) 我想知道如何在 Vaadin 7 中添加 Javascript/JQuery。在 Vaadin 6 中似乎很容易。但是,我无法在 Vaadin 7 中使用它。我希望他们现在可以让它变得更容易。谁能给我看一些关于这个的例子。如果是 JQuery,对我有很大帮助。

在这里,您有一个关于如何将 jQuery 与 Vaadin 7 集成的很好的教程:http: //java.dzone.com/articles/integrating-html-and-0

它基本上是关于创建一个 JavascriptExtension 类,这是解决方案的主要部分:

@JavaScript({ "https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.js" })
public class JavascriptJQueryExtension extends AbstractJavaScriptExtension {
    ... // Please see the link above for an example of implementation
}

路径可以是 URL 或 jQuery 库的内部路径。

3)“执行javascript”或“添加指定脚本”到代码中。

如 Vaadin 7 ( https://vaadin.com/book/vaadin7/-/page/advanced.javascript.html )中所述,将执行以下代码片段

// Shorthand
JavaScript.getCurrent().execute("alert('Hello')");

JavaScript 在当前处理的服务器请求返回后执行。(...)

我建议你好好看看 Vaadin 之书。它包含许多重要信息,通常有助于解决使用 Vaadin 时出现的大多数问题。

于 2013-06-30T21:24:17.763 回答
3

我不是 Vaadin 框架的专家...

我可以告诉你,你的第三个问题是通过它运行 JavaScript 命令。

你也可以通过它运行 jQuery 命令。

但为此,您必须在页面中包含 jQuery ..

对于问题 1:我可以说这是可能的,因为 Vaadin 具有覆盖功能的功能..

JavaScript.getCurrent().addFunction("com.example.foo.myfunc",
                                    new JavaScriptFunction() {
    @Override
    public void call(JSONArray arguments) throws JSONException {
        Notification.show("Received call");
    }
});

Link link = new Link("Send Message", new ExternalResource(
        "javascript:com.example.foo.myfunc()"));

现在在没有支持代码的情况下,您必须确定在每个操作上调用服务器的实际插件函数。确保您是否覆盖该功能..您将在某些时候需要该功能..所以不要覆盖实际需要的功能....

问题2,

是的,vaadin 可以使用 jQuery,请参阅论坛

它说你可以像这样直接调用jQuery$wnd.JQuery

我希望这个能帮上忙...

于 2013-06-27T08:46:31.370 回答