改变主题不是持久的Vaadin

时间:2018-10-09 20:47:54

标签: vaadin vaadin8

我正在通过ui.setTheme("theme-name")更改主题。在我更改页面之前,它的效果很好,然后又返回到默认页面。如何使其持久?

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

1 个答案:

答案 0 :(得分:3)

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

根据您希望主题的持久性,有两种不同的解决方法。

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

另一种方法是,您将用户的主题选择明确存储在某个地方,然后手动将其重新应用到例如UI.init或用户登录后。存储此信息的两个最明显的候选对象是cookie或用户数据库中。