Ваадин сохранить тему - PullRequest
0 голосов
/ 03 мая 2018

В приложении я хочу дать возможность сменить тему, но если я обновлю страницу, она вернется к теме по умолчанию, я не знаю, как сохранить тему для всех приложений, кто-то может мне помочь?

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 голосов
/ 04 мая 2018

По умолчанию Vaadin выполняет UI.init при перезагрузке браузера, что сбрасывает тему. У вас есть два основных варианта:

  1. Сохранить выбранную тему в переменной класса, а также вызвать setTheme в вашем UI.init () , если эта переменная была установлена.
  2. Используйте @ PreserveOnRefresh аннотацию к классу пользовательского интерфейса, чтобы автоматически поддерживать полное состояние пользовательского интерфейса. При использовании этой аннотации в этом случае UI.init вызывается только один раз при запуске сеанса.
...