java - Vaadin 保存主题

标签 java vaadin

在应用程序中,我想提供更改主题的可能性,但如果我刷新页面,它将返回到默认主题,我不知道如何为所有应用程序保存主题,有人可以帮助我吗?

import com.vaadin.ui.ComboBox;
import com.vaadin.ui.CustomComponent;


public class ThemeSelectorComboBox extends CustomComponent
{
    private static final String SELECT_THEME = "Select theme:";
    private final ComboBox<CustomTheme> comboBox = new ComboBox<>();

public ThemeSelectorComboBox()
{
    init();
}

private void init()
{
    comboBox.setCaption(SELECT_THEME);
    comboBox.setItems(CustomTheme.values());
    comboBox.setSelectedItem(CustomTheme.MATERIAL_DARK);
    comboBox.addValueChangeListener(event -> flipTheme(event.getValue()));
    setCompositionRoot(comboBox);

    // Set the size as undefined at all levels
    comboBox.setSizeUndefined();
    setSizeUndefined();
}

private void flipTheme(CustomTheme theme)
{
    if (theme != null)
    {
        getCompositionRoot().getUI().setTheme(theme.getThemeName());


    }
}

}

最佳答案

默认情况下,Vaadin 在浏览器重新加载时执行 UI.init,从而重置主题。您基本上有两个选择:

  1. 将选定的主题存储在类变量中,并调用 setTheme在你的UI.init()如果已设置此变量。
  2. 使用@PreserveOnRefresh对 UI 类进行注释以自动维护完整的 UI 状态。在这种情况下使用此注释时,UI.init 仅在 session 启动时调用一次。

关于java - Vaadin 保存主题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50163521/

相关文章:

java - 数组未调整大小

java - Servlet 中的单例和 Tomcat7 上的其他类

java - Vaadin 中的单例

java - Vaadin 插件无法在 Eclipse (Windows 8.1) 中运行

java - 如何在java中使用正则表达式分割字符串

java - 在java中运行动态生成的flyway脚本

java - aws java sdk 未返回所有文件夹

file-upload - 上传按钮 Vaadin 的接收者

html - Vaadin - 删除表格中的单元格边框

java - Vaadin 本地语言环境选择