Vaadin - 从 Javascript 调用 Java 不再适用于 $server

问题描述 投票:0回答:1

我有一个使用 Vaadin 从 Java 调用 Javascript 的 Java 类:

@StyleSheet("https://cdn.jsdelivr.net/npm/[email protected]/dist/css/shepherd.css")
@JavaScript("https://cdn.jsdelivr.net/npm/[email protected]/dist/js/shepherd.min.js")
@JsModule("./scripts/shepherd.js")
public class MainView extends VerticalLayout {
   public MainView() {
       Button button = new Button("Click me");
       button.addClickListener(c ->
       UI.getCurrent().getPage().executeJs("window.startTour($0)", this);
   }

   @ClientCallable
   public boolean get() {
      return true;
   }
}

在我的 shepherd.js Javascript 文件中,我将在 Java 中调用一个方法(注解 @ClientCallable):

window.startTour = (element) => {
    let useModalOverlay = element.$server.get()
}

我只是在控制台中收到一个错误,而不是点击结果:

无法读取 null 的属性(读取“$server”)

我不知道我做错了什么,但我确定一切都很好。我只是没有看到问题。 如果你想知道为什么我调用 Javascript 然后从那里调用 Java,那是因为我使用 ShepherdJS 在 Javascript 中编写用户指南,因此我需要方法来调用 java 部分,因为 ShepherdJS 只是 javascript -> 另请参阅我昨天的问题例如。

javascript java frontend client vaadin
1个回答
0
投票

文档

executeJs
Javadoc 中所述,如果在调用方法时未附加组件和元素参数,则它们将作为
null
发送。

onAttach
方法或 AttachListener

中移动调用

编辑:抱歉,我错过了按钮点击监听器。但后来我在本地尝试了你的例子,它按预期工作了

© www.soinside.com 2019 - 2024. All rights reserved.