标签: vaadin-flow

如何找出Vaadin 10中按钮的宽度?

所以我有三个这样的按钮.

Lumo.DARK中的3个Vaadin按钮

我的目标是使这些按钮具有相同的宽度.
要做到这一点,我想检查每个按钮的宽度,将最大值(在这种情况下 - 第二个按钮)放在一个变量中,然后将每个按钮的宽度设置为此值.
我不想使用一些幻数设置宽度,因为我的按钮上的文字可能会改变.

我试着这样做:

String maxWidth = findMaxValue(button1.getWidth(), button2.getWidth(), button3.getWidth());
button1.setWidth(maxWidth);
button2.setWidth(maxWidth);
button3.setWidth(maxWidth);
Run Code Online (Sandbox Code Playgroud)

getWidth()如果未setWidth事先使用该方法设置,则问题是返回null .那么,我如何找出按钮的宽度?

vaadin vaadin10 vaadin-flow

1
推荐指数
1
解决办法
222
查看次数

Vaadin 流程:byte[] 到图像

我尝试显示以 blob 形式存储在表中的图像。

所以我需要将 byte[] 转换为 Vaadin Image 类(我猜这是显示它的最佳方式?)。

我尝试这个解决方案(4岁​​):

https://vaadin.com/forum/thread/10271496/byte-array-to-vaadin-image

它不工作:

new StreamResource.StreamSource() { -> Cannot resolve symbol 'StreamSource'
Run Code Online (Sandbox Code Playgroud)

我怎样才能在 Vaadin 13 中做到这一点?

vaadin vaadin-flow

1
推荐指数
1
解决办法
1032
查看次数

搜索在 vaadin UI 之间传递数据的最佳实践

我是 vaadin 的新手,我正在尝试使用 SQL Server 中的数据构建一个包含多个页面的 Web 应用程序。感谢我对几个 StackOverflow 主题的研究,我可以让第一页工作,在网格中显示我的 Person 实体的一些基本数据。

现在,当我在网格中选择一条记录并单击一个按钮时,我想打开第二页并使用所选人员的 ID ( person.getId()) 将其他数据从后端加载到 FormLayout(在本例中为联系信息)。

目前,我已经让我的应用程序打开了第二页,但没有数据。我的第二页有@Route("/contact")注释,我ui.navigate("/contact")在第一页中使用,以导航到第二页。

昨天我花了几个小时阅读 Blackboard EventBus 在页面之间传递数据。我做了一个简单的例子,第一页触发一个人事件,第二页监听这些事件并用System.out.println(). 但是如何使用此事件/人员数据刷新我的第二个 vaadin 页面?在 Blackboard 代码示例中,我的 Blackboard Bus 是静态的。

如前所述,我想选择一个人,然后导航到另一个页面以加载此人的其他信息。如果用户导航回第一页并选择另一个人,再次单击按钮导航到第二页,则第二页应刷新并显示新选择的人的数据。

目前,我的第二个页面加载,但崩溃了NullPointerException,因为 selectedPerson 变量为空,我不明白如何使用 Blackboard Listener 使用从事件中检索到的人员数据刷新 UI。

我现在真的不知道如何进行。

java sql-server spring vaadin vaadin-flow

1
推荐指数
1
解决办法
274
查看次数

从Vaadin 14开始寻找新的UI

Vaadin 14手册中的导航生命周期说:

也可以使用中的addBeforeEnterListener(BeforeEnterListener)方法为该事件注册一个独立的侦听器UI

但是在具有路由功能的现代Vaadin中,我们不再应该编写UI子类。我的粗略理解是确实存在一个UI为我们自动实例化的对象,然后路由自动替换了该UI对象中的内容。因此,UI对于使用Vaadin Flow的程序员来说,对象的存在应该是透明的。

?那么,新UI实例上的生命周期挂钩是什么,这样我就可以编写一个用户身份验证检查以BeforeEnterListener在所有@Route视图中全局工作?

调用UI.getCurrent不会做,因为我需要从布局中的某个地方调用它,但是我试图布局存在之前注册一个侦听器。

hook user-interface lifecycle vaadin vaadin-flow

1
推荐指数
1
解决办法
63
查看次数

响应式 Vaadin 流网格

网格是一张漂亮的桌子,非常适合台式机或平板电脑等宽屏幕。但是,当在较小的移动设备上显示时,网格将无法容纳超过几列。您在应用程序中是如何解决这个问题的?

表堆栈模式听起来很有希望: https: //responsivedesign.is/patterns/data-table-stack/ 但是我如何使用 Vaadin Flow 来实现这一点?是否可以根据屏幕尺寸将网格与项目列表交换?

vaadin responsive-design vaadin-flow

1
推荐指数
1
解决办法
367
查看次数

Vaadin Spring Boot:多个用户访问 UI 时“无法在不锁定会话的情况下访问 VaadinSession 或 UI 中的状态”

我有一个带弹簧靴的 vaadin flow (13) 应用程序。我有一个 VerticalLayout,@UIScope用多个子布局注释。子布局@Scope("prototype")通过ctx.getBean(SubUI.class, ...). 根据父 UI (VerticalLayout) 上的选择和按钮单击,添加或删除子布局。

只要我单独使用该应用程序,一切都可以正常工作(这就是我在将应用程序交付给我的客户进行验收测试后现在发现错误的原因)。他们对多个用户进行了测试。只要有一个用户使用该应用程序,一切都正常,但是一旦第二个用户进入 UI (VerticalLayout),就会抛出以下异常:

java.util.concurrent.ExecutionException: java.lang.IllegalStateException: Cannot access state in VaadinSession or UI without locking the session.
    at java.util.concurrent.FutureTask.report(FutureTask.java:122) ~[na:1.8.0_202]
    at java.util.concurrent.FutureTask.get(FutureTask.java:192) ~[na:1.8.0_202]
    ...
Run Code Online (Sandbox Code Playgroud)

我为我的父布局尝试了不同的注释(@UIScope、@Scope("prototype")、@VaadinSessionScope)但没有解决我的错误。

我用谷歌搜索了这个问题并找到了一些线索,但没有一个能帮助我解决我的问题。我不确定问题是由我的 UI/布局的范围引起的,还是由数据绑定引起的。在我的子布局中,数据使用Binder<MyEntity> binder = new Binder<>(MyEntity.class);和绑定binder.forField(xxx).bind(MyEntity::getXY,MyEntity::setXY);

有人可以解释我,我的问题是什么?我会很高兴,因为我需要为我的客户测试提供一个固定版本。

亲切的问候

java vaadin spring-boot vaadin-flow

1
推荐指数
1
解决办法
948
查看次数

如何以本机方式从 Vaadin 后端向一个或特定数量的(Android 智能手机)用户发送通知?

PWA 的问题是,当浏览器关闭(或智能手机处于非活动状态)时,用户将无法看到通知。

\n\n

最佳情况下,PWA 图标应该带有数字++ 和铃声以吸引用户的注意力。

\n\n

这有可能吗?如果不是有什么解决方案?

\n

vaadin progressive-web-apps vaadin10 vaadin-flow

1
推荐指数
1
解决办法
280
查看次数

在 Vaadin UI 上执行异步操作

我有一个带有 Vaadin 集成 (v14) 的 Spring Boot 项目。我希望我的应用程序执行一些后台操作并在基于 Vaadin 的前端上表示结果。为此,我有一个视图,它是一个使用 Vaadin Designer (.js) 生成并连接到 Java 配套类的 Polymer 模板。对于这个视图,我只是简单地添加了一个使用以下侦听器初始化的按钮:

        _btnMyTriggerButton.addClickListener(event -> {

        CompletableFuture<Void> c = CompletableFuture.supplyAsync(() -> {
            for (int i = 0; i < 5; i++)
            {
                try
                {
                    System.out.println("Waiting");
                    Thread.sleep(1000);
                    UI.getCurrent().access(() -> {
                        Notification.show("Waiting");
                    });
                }
                catch (InterruptedException e)
                {
                }
            }
            return "Waiting over. Greet!";
        }).thenAccept(s -> {
            System.out.println(s);
            UI.getCurrent().access(() -> {
                Notification.show(s);
            });
        });
Run Code Online (Sandbox Code Playgroud)

我正在尝试按照文档中的说明访问 UI。但是,当它正在执行时,它只会到达第一个“等待”,然后停止。如果我删除 UI 交互(Notification.show()),输出将根据需要打印到后端,但在尝试在 UI 上进行任何交互时不会。

我的java伴侣类的结构如下:

@Tag("my-view")
@JsModule("./my-view.js")
@Route("")
@Push(PushMode.AUTOMATIC) …
Run Code Online (Sandbox Code Playgroud)

user-interface asynchronous vaadin spring-boot vaadin-flow

1
推荐指数
1
解决办法
214
查看次数

在 AppLayout 在 Vaadin 14 (Vaadin Flow) 中呈现之前,如何在视图中的 BeforeEnterObserver 中重新路由

例如,让我们有:

public class MainView extends AppLayout {
   public MainView() {
      User user = VaadinSession.getAttribute("user");
      if(user.isCheckSomething())
          Span span = new Span("Hello " + user.getFirstname());
   }
}
Run Code Online (Sandbox Code Playgroud)

如果用户尚未登录,这将因 NPE 而失败,因为从会话中获取用户将为空。现在我可以在之前添加一个空检查,if(user.isCheckSomething())但理想情况下AppLayout,如果用户未登录,我宁愿根本不进行渲染。 那是我宁愿BeforeEnterObserverpublic void beforeEnter(BeforeEnterEvent event)方法中的视图中失败,但是AppLayout之前调用并创建了该beforeEnter(...)方法被调用。

换句话说,AppLayout如果用户未通过视图登录,我如何强制完全跳过的实例化,以便AppLayout永远不会构造 。

vaadin vaadin-flow vaadin14

1
推荐指数
1
解决办法
42
查看次数

Vaadin 流程:DatePicker setAutoselect(true)

我正在使用 Vaadin Flow 构建表单。我确实喜欢能够使用选项卡逐步浏览表单的元素,并且在焦点上我确实喜欢选择文本字段的内容。

这适用于所有不同类型的文本字段和文本区域,但不适用于选择器。是否可以访问后面的文本字段并设置自动选择属性?

setAutoselect(true);
Run Code Online (Sandbox Code Playgroud)

vaadin vaadin-flow

1
推荐指数
1
解决办法
92
查看次数