【问题标题】:How can I change Vaadin Components in Java through Javascript如何通过 Javascript 更改 Java 中的 Vaadin 组件
【发布时间】:2023-02-15 20:41:08
【问题描述】:

我在我的 Vaadin 项目中实施了 Shepherd,因此我可以通过我的 Web 应用程序指导用户游览。 但是,我需要从 Vaadin 的手风琴组件上的 javascript 获得访问权限,以打开或关闭特定的选项卡。为此,我需要访问 Accordion 组件的 open() 和 close() 方法。那么我如何通过 Javascript 访问它们呢?

已经在他们的网站上看到教程: Vaadin calling java from javascript, 但遗憾的是,那里什么都没有,有什么可以帮助我的。 我已经尝试过使用这样的东西:

UI.getCurrent().getPage().executeJs("window.startTour($0, $1)", this, Accordion1.getElement());

但是当我尝试通过以下方式在javascript中绑定它时:

window.startTour = (element, accordion) => { ... }

并在此窗口中:

beforeShowPromise: function () {
    return new Promise(function(resolve) {
    element.$server.openAccordion(accordion.$server, 1);
    resolve();
    });
},

在java中使用以下方法:

@SuppressWarnings("unused")
@ClientCallable
public void openAccordion(Object object, int index) {
        Accordion accordion = (Accordion) object.get(this);
    accordion.open(index);
}

我只收到以下错误消息:

类“...”具有方法“openAccordion”,其参数 0 指的是不受支持的类型“java.lang.Object”

无论我将什么用作第一个参数,扩展 Object 的所有内容都不起作用,我不知道为什么。

我发现了一个最近的帖子有同样的问题,但它对我没有帮助: Unable to send a new bean instance to the server

我在我的项目中使用 Intellij:Java、Spring、Vaadin 和 Shepherd

已经尝试使用不同的参数,但只有 int 参数有效,Object 无效。 问题是,由于这个错误,我无法通过 Java 从 Javascript 更改 Accordion 打开的选项卡,所以我必须为每个 Accordion 2 方法实现打开和关闭它。

也许有人可以帮助我或者知道一些技巧来掌握它。 谢谢

【问题讨论】:

    标签: javascript spring vaadin client-server illegalargumentexception


    【解决方案1】:

    使用 @ClientCallable 时,您只能将 json 或原始类型从 JavaScript 调用传递到服务器。这里有一个真正的系统边界。 Object 不受支持,此外,您可以将该参数转换为 Java 对象。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-06-28
      • 2013-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-06
      • 1970-01-01
      相关资源
      最近更新 更多