2016-05-14 17 views
1

I Frühling Boot verwenden, und ich will Fliesen verwenden, aber ich habe ein Problem:Frühling boot: TilesDialect() throw Ausnahme

Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.thymeleaf.spring4.SpringTemplateEngine]: Factory method 'getTemplateEngine' threw exception; nested exception is java.lang.NoSuchMethodError: org.thymeleaf.dialect.AbstractDialect: method <init>()V not found 
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:189) ~[spring-beans-4.2.6.RELEASE.jar:4.2.6.RELEASE] 
at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:588) ~[spring-beans-4.2.6.RELEASE.jar:4.2.6.RELEASE] 
... 18 common frames omitted 
Caused by: java.lang.NoSuchMethodError: org.thymeleaf.dialect.AbstractDialect: method <init>()V not found 
at org.thymeleaf.extras.tiles2.dialect.TilesDialect.<init>(TilesDialect.java:46) ~[thymeleaf-extras-tiles2-2.1.1.RELEASE.jar:na] 
at com.scheduler.config.mvc.MvcConfiguration.getTemplateEngine(MvcConfiguration.java:39) ~[classes/:na] 
at com.scheduler.config.mvc.MvcConfiguration$$EnhancerBySpringCGLIB$$7a5dfe74.CGLIB$getTemplateEngine$1(<generated>) ~[classes/:na] 
at com.scheduler.config.mvc.MvcConfiguration$$EnhancerBySpringCGLIB$$7a5dfe74$$FastClassBySpringCGLIB$$41c485b2.invoke(<generated>) ~[classes/:na] 
at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:228) ~[spring-core-4.2.6.RELEASE.jar:4.2.6.RELEASE] 
at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:356) ~[spring-context-4.2.6.RELEASE.jar:4.2.6.RELEASE] 
at com.scheduler.config.mvc.MvcConfiguration$$EnhancerBySpringCGLIB$$7a5dfe74.getTemplateEngine(<generated>) ~[classes/:na] 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.7.0_80] 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) ~[na:1.7.0_80] 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.7.0_80] 
at java.lang.reflect.Method.invoke(Method.java:606) ~[na:1.7.0_80] 
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:162) ~[spring-beans-4.2.6.RELEASE.jar:4.2.6.RELEASE] 

Mein Teil WebMvcConfigurerAdapter:

@Bean(name = "templateResolver") 
public SpringResourceTemplateResolver getTemplateResolver() { 
    SpringResourceTemplateResolver templateResolver = new SpringResourceTemplateResolver(); 
    templateResolver.setPrefix("/WEB-INF/views/"); 
    templateResolver.setSuffix(".html"); 
    templateResolver.setTemplateMode("HTML"); 
    templateResolver.setCacheable(false); 
    return templateResolver; 
} 

@Bean(name = "templateEngine") 
public SpringTemplateEngine getTemplateEngine(SpringResourceTemplateResolver resolver) { 
    SpringTemplateEngine templateEngine = new SpringTemplateEngine(); 
    templateEngine.setTemplateResolver(resolver); 
    templateEngine.addDialect(new SpringSecurityDialect()); 
    templateEngine.addDialect(new TilesDialect()); 
    return templateEngine; 
} 

@Bean(name = "viewResolver") 
public ThymeleafViewResolver getViewResolver(SpringTemplateEngine templateEngine) { 
    ThymeleafViewResolver viewResolver = new ThymeleafViewResolver(); 
    viewResolver.setTemplateEngine(templateEngine); 
    viewResolver.setCharacterEncoding("UTF-8"); 
    viewResolver.setOrder(Ordered.HIGHEST_PRECEDENCE); 
    viewResolver.setExcludedViewNames(new String[]{"*"}); 
    return viewResolver; 
} 

Wenn der Balg Linie ausführen, über Ausnahme werfen:

templateEngine.addDialect(new TilesDialect()); 

pom.xml Abhängigkeiten:

<dependencies> 

    <!-- Spring Boot --> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-web</artifactId> 
    </dependency> 


    <!-- Spring security --> 
    <dependency> 
     <groupId>org.springframework.security</groupId> 
     <artifactId>spring-security-core</artifactId> 
     <version>4.1.0.RELEASE</version> 
    </dependency> 

    <dependency> 
     <groupId>org.springframework.security</groupId> 
     <artifactId>spring-security-web</artifactId> 
     <version>4.1.0.RELEASE</version> 
    </dependency> 

    <dependency> 
     <groupId>org.springframework.security</groupId> 
     <artifactId>spring-security-config</artifactId> 
     <version>4.1.0.RELEASE</version> 
    </dependency> 


    <!-- Thymeleaf --> 
    <dependency> 
     <groupId>org.thymeleaf</groupId> 
     <artifactId>thymeleaf-spring4</artifactId> 
     <version>3.0.0.RELEASE</version> 
    </dependency> 

    <dependency> 
     <groupId>org.thymeleaf</groupId> 
     <artifactId>thymeleaf</artifactId> 
     <version>3.0.0.RELEASE</version> 
    </dependency> 

    <dependency> 
     <groupId>org.thymeleaf.extras</groupId> 
     <artifactId>thymeleaf-extras-java8time</artifactId> 
     <version>2.1.0.RELEASE</version> 
    </dependency> 

    <dependency> 
     <groupId>org.thymeleaf.extras</groupId> 
     <artifactId>thymeleaf-extras-tiles2-spring4</artifactId> 
     <version>2.1.1.RELEASE</version> 
    </dependency> 

    <dependency> 
     <groupId>org.thymeleaf.extras</groupId> 
     <artifactId>thymeleaf-extras-springsecurity3</artifactId> 
     <version>3.0.0.RELEASE</version> 
    </dependency> 

</dependencies> 

Können Sie mir helfen? Vielen Dank!

Antwort

3

Dies ist, weil die brandneue Thymeleaf 3.0.0.RELEASE Tiles noch nicht unterstützt. Sie müssen auf ein Update von thymeleaf-extras-tiles2-spring4 warten, kommen Sie zurück zu Thymeleaf 2 oder Rücktritt von Tiles wie ich: P

+0

Danke für die Hilfe :) Ich habe thymeleaf auf "2.1.2.RELEASE" eingestellt und es funktioniert! :) – Jacek

+0

irgendwelche Neuigkeiten, wann es veröffentlicht wird? Seit diesem Post sind zehn Monate vergangen – Jake

0

Ich hatte ein Problem mit der Integration zwischen Spring-sozialen und Thymeleaf 3.0.3.

Meine Lösung:

1) für Modul-Modul von Autokonfiguration ausschließen (in meiner Situation Frühjahr sozialen):

@SpringBootApplication 
@EnableAutoConfiguration(exclude = {SocialWebAutoConfiguration.class}) 
public class MyApplication { ... 

2) Erstellen Sie Konfigurationsklasse:

@EnableSocial 
@Configuration 
public class SocialConfig implements SocialConfigurer { 
... 
} 

3) Override ModuleDialect Klasse (für mich: SpringSocialDialect.class):

public class CustomSpringSocialDialect extends AbstractDialect { 

    public CustomSpringSocialDialect() { 
    super("social"); 
    } 

    public String getPrefix() { 
    return "soc"; 
    } 

    public Set<IProcessor> getProcessors() { 
    return new SpringSocialDialect().getProcessors(); 
    } 
} 

4) Dialekt zu templateEngine in MvcConfig.class hinzufügen:

@Bean 
public SpringTemplateEngine templateEngine(ITemplateResolver templateResolver) { 
    SpringTemplateEngine templateEngine = new SpringTemplateEngine(); 
    templateEngine.setTemplateResolver(templateResolver); 
    templateEngine.addDialect(new SpringSecurityDialect()); 
    templateEngine.addDialect(new CustomSpringSocialDialect()); 
    templateEngine.addDialect(new Java8TimeDialect()); 
    templateEngine.setMessageSource(messageSource()); 

    return templateEngine; 
} 

Ich denke, Ihr Problem in dieser Richtung haben. Also Ihr TilesDialect hat Konstruktor ohne arg, es ist Ihr Problem. Danach können Sie die letzte Version thymeleaf verwenden

Verwandte Themen