我正在通过ui.setTheme("theme-name")
更改主题。在我更改页面之前,它的效果很好,然后又返回到默认页面。如何使其持久?
每个页面类都有@Theme
注释,其默认主题名称取自Spring的application.yml
。
答案 0 :(得分:3)
发生这种情况是因为每次在浏览器中加载新页面时(即不仅使用Navigator从一个视图切换到另一个视图),都会创建一个新的UI实例。除非有人再次明确运行setTheme("some-theme")
,否则该UI实例将使用默认主题。
根据您希望主题的持久性,有两种不同的解决方法。
一种方法是将@PreserveOnRefresh
添加到您的UI
子类中。当重新加载或临时导航到其他站点时,这将使先前的UI实例重用。如果用户关闭浏览器选项卡并稍后再打开一个新选项卡,它将不会保留UI和主题设置。
另一种方法是,您将用户的主题选择明确存储在某个地方,然后手动将其重新应用到例如UI.init
或用户登录后。存储此信息的两个最明显的候选对象是cookie或用户数据库中。