首页 > 解决方案 > 改变主题不是持久的 Vaadin

问题描述

我正在改变主题ui.setTheme("theme-name")。在我更改页面之前它工作得很好 - 然后它会回到默认页面。如何让它持久化?

每个页面类都有@Theme注释,默认主题名称取自 Spring 的application.yml.

标签: vaadinvaadin8

解决方案


发生这种情况是因为每次在浏览器中加载新页面(即不仅使用 Navigator 从一个视图更改为另一个视图),都会创建一个新的 UI 实例。该 UI 实例将使用默认主题,除非有人setTheme("some-theme")再次明确运行。

根据您希望主题的持久性,有几种不同的方法可以解决此问题。

一种方法是添加@PreserveOnRefresh到您的UI子类中。这将使以前的 UI 实例在重新加载或临时导航到其他站点时重用。如果用户关闭浏览器选项卡并稍后打开一个新选项卡,它将不会保留 UI 和主题设置。

另一种方法是您将用户的主题选择显式存储在某处,然后手动重新应用该设置,例如UI.init或在用户登录后。存储此设置的两个最明显的候选者是在 cookie 或用户数据库中。


推荐阅读