Стили в vaadin 8

188
22 февраля 2019, 22:40

Недавно начал работать c vaadin 8, и все никак не получается менять стили. Например я пишу свой стиль в файл mytheme.scss ,далее запись переносится в style.css,но на этом все, я добавляю его например в Label методом setStyleName(class_name); и ничего не меняется.

Answer 1
  1. Откройте в браузере "Инструменты разработчика"
  2. Перейдите на вкладку "Network"
  3. Отфильтруйте запросы на загрузку каскадных таблиц стилей с использованием кнопки CSS
  4. Убедитесь, что в списке запросов присутствует запрос http://mydomain/VAADIN/themes/mytheme/styles.css

Если данный запрос присутствует, но статус ответа != 200 значит у Вас проблема с конфигурацией веб-приложения, и в частности проблема с отдачей ресурсов. В разных стеках данная проблема решается по-разному. Я чаще использую Spring, и для того чтобы отдать кастомные Vaadin ресурсы использую следующее правило в классе настройки MVC:

registry.addResourceHandler("/VAADIN/**").addResourceLocations("classpath:/VAADIN/");

Сам класс выглядит примерно так:

@Configuration
@EnableWebMvc
@ComponentScan("com.vaadin.spring.boot")
public class MVCConfig  extends WebMvcConfigurerAdapter implements ApplicationContextAware {
        // ...    
        @Override
        public void addResourceHandlers(final ResourceHandlerRegistry registry) {
            super.addResourceHandlers(registry);
            // ...
            registry.addResourceHandler("/VAADIN/**").addResourceLocations("classpath:/VAADIN/");
            // ...                   
        }
        // ...    
}

мои ресурсы при этом лежат в src\main\resources\VAADIN\themes\mytheme\*

Если же запрос на загрузку Ваших стилей отсутствует то скорее всего Вы не установили свою тему в Vaadin приложении. По умолчанию Vaadin 8 использует тему Valo и в таком случае, в списке запросов должен присутствовать запрос http://mydomain/VAADIN/themes/valo/styles.css. В данном случае Vaadin не будет загружать стили Вашей темы, поскольку он ничего о ней не знает.

Для того чтобы установить свою тему необходимо проставить аннотацию @Theme над Вашим UI-классом:

@Theme("mytheme")
public class MyUI extends UI {
    @Override
    protected void init(VaadinRequest request) {
        ...
    }
}

Также если Вы не хотите полностью заменять текущую тему, а лишь добавить пару-тройку дополнительных стилей, Вы можете просто указать дополнительные ресурсы с помощью аннотаций @StyleSheet, @JavaScript в UI - классе.(Путь к ресурсам может отличаться в зависимости от конфигурации Вашего проекта - будьте осторожны)

@StyleSheet("app://../VAADIN/themes/valo/additional.css")
@JavaScript("app://../VAADIN/themes/valo/additional.js")
public class VaadinUI extends UI {
   // ...
}
READ ALSO
Что значит аннтотация @XmlType

Что значит аннтотация @XmlType

Есть класс, который я хочу сериализовать в XML:

199
Почему calc запускается а regedit нет

Почему calc запускается а regedit нет

Windows 10Пробую из Java запускать сторонние программы

137
Помогите реализовать слайдер на CSS

Помогите реализовать слайдер на CSS

Помогите пожалуйста реализовать простейший слайдер на css как на примере

151