2017-02-03 2 views
2

В конфигурации моего шаблона двигателя я хотел бы добавить SpringSecurityDialect(), как:Как добавить Thymeleaf SpringSecurityDialect к весне загрузки

@Bean 
public TemplateEngine templateEngine() { 
    SpringTemplateEngine engine = new SpringTemplateEngine(); 
    engine.addDialect(new SpringSecurityDialect()); 
    engine.setEnableSpringELCompiler(true); 
    engine.setTemplateResolver(templateResolver()); 
    return engine; 
} 

Однако затмение говорит мне:

Тип org.thymeleaf.dialect.IExpressionEnhancingDialect не может быть разрешен. Это косвенно ссылается на требуемые файлы .class

Что это значит и как его исправить?

В pom.xml у меня есть:

<dependency> 
    <groupId>org.thymeleaf.extras</groupId> 
    <artifactId>thymeleaf-extras-springsecurity4</artifactId> 
</dependency> 

ответ

3

Это означает, что org.thymeleaf.extras:thymeleaf-extras-springsecurity4 имеет зависимость к org.thymeleaf:thymeleaf, как вы можете увидеть в ссылке на вышеупомянутом репо. Видимо, вы не предоставили эту зависимость. Класс IExpressionEnhancingDialect есть. Это можно решить, добавив зависимость к вашему проекту.

Так как это может немного усложниться ... Я также играю с Spring Boot, весной безопасности и диалектом безопасности для тимелеафа (плюс данные весны с h2). Вот мой Gradle зависимости для справки, они могут помочь вам как-то:

ext['thymeleaf.version'] = '3.0.1.RELEASE' 
ext['thymeleaf-layout-dialect.version'] = '2.0.0' 

dependencies { 
    compile("org.springframework.boot:spring-boot-devtools") 
    compile("org.springframework.boot:spring-boot-starter-web") 
    compile("org.springframework.boot:spring-boot-starter-thymeleaf") 
    compile("org.springframework.boot:spring-boot-starter-data-jpa") 
    compile("org.springframework.boot:spring-boot-starter-security") 
    compile("org.thymeleaf.extras:thymeleaf-extras-springsecurity4:3.0.1.RELEASE") 

    compile("com.h2database:h2") 
} 

Обратите внимание, что я хочу использовать thymeleaf 3 вместо 2, поэтому есть некоторые дополнительные неприятные твики в моей конфигурации.

EDIT: Версия thymeleaf-extras-springsecurity4 должна быть такой же, как thymeleaf.version, как предложено в другой ответ.

+1

Спасибо. Он работает сейчас. Мне пришлось добавить версию (3.0.1.RELEASE) в thymeleaf-extras-springsecurity4, а также изменить версию тимелеафа от версии 3.0.2. REELASE до 3.0.1.RELEASE – user1583209

3

Как уже сказал @Lachezar, вам нужно добавить эти недостающие зависимости. Но указанная версия с ext['thymeleaf.version'] = '3.0.0.RELEASE должна быть такой же, как в зависимостях компиляции, поэтому лучше использовать ext['thymeleaf.version'] = '3.0.1.RELEASE'.

Кроме того, пожалуйста, не нужно указывать только компонент для диалекта безопасности без предоставления компонента для механизма шаблонов. С Thymeleaf на пути к классам он автоматически распознает, что компонент является экземпляром IDialect и добавляет его непосредственно к диалектам:

@Bean 
public SpringSecurityDialect springSecurityDialect() { 
    return new SpringSecurityDialect(); 
} 
+0

Спасибо, Том. Я исправлю свой ответ (и мой игрушечный проект, конечно), чтобы версии были одинаковыми. –

Смежные вопросы