瓦丁保存主题

时间:2018-05-03 20:39:22

标签: 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());


    }
}

}

1 个答案:

答案 0 :(得分:2)

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

  1. 将所选主题存储在类变量中,如果已设置此变量,还可以在setTheme中调用UI.init()
  2. 对UI类使用@PreserveOnRefresh注释以自动维护完整的UI状态。在这种情况下使用此注释时,UI.init仅在会话开始时调用一次。