簡體   English   中英

Spring MVC 4 + Apache Tiles 2 + Thymeleaf 3的集成錯誤

[英]Integration Error for Spring MVC 4 + Apache Tiles 2 + Thymeleaf 3

我的團隊已經使用JSP進行了一個項目幾個月。 最近,我們意識到Thymeleaf的實現對於我們的Web設計人員可能很方便,因此我們開始着手進行集成。 以下是我們的webapp的配置。

import java.util.LinkedHashSet;
import java.util.Set;

import org.springframework.context.MessageSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping;
import org.springframework.web.servlet.view.tiles2.TilesConfigurer;
import org.thymeleaf.dialect.IDialect;
import org.thymeleaf.extras.tiles2.dialect.TilesDialect;
import org.thymeleaf.extras.tiles2.spring4.web.configurer.ThymeleafTilesConfigurer;
import org.thymeleaf.extras.tiles2.spring4.web.view.ThymeleafTilesView;
import org.thymeleaf.spring4.SpringTemplateEngine;
import org.thymeleaf.spring4.templateresolver.SpringResourceTemplateResolver;
import org.thymeleaf.spring4.view.ThymeleafViewResolver;
import org.thymeleaf.templateresolver.ITemplateResolver;

import com.mycompany.web.MultilanguageMessageSource;

@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "com.mycompany")
public class ViewConfig extends WebMvcConfigurerAdapter {
    /**
     * auto redirection for trailing slash
     */
    @Bean
    public RequestMappingHandlerMapping requestMappingHandlerMapping(){
        RequestMappingHandlerMapping mapping = new RequestMappingHandlerMapping();
        mapping.setUseTrailingSlashMatch(true);
        return mapping;
    }


    // view resolvers
    @Bean
    public ITemplateResolver templateResolver(){
        SpringResourceTemplateResolver resolver = new SpringResourceTemplateResolver();
        resolver.setTemplateMode("LEGACYHTML5");
        resolver.setCharacterEncoding("UTF-8");
        resolver.setSuffix(".html");
        resolver.setCacheable(false);
        resolver.setOrder(0);
        return resolver;
    }

    @Bean
    public ViewResolver viewResolver(){
        ThymeleafViewResolver resolver =  new ThymeleafViewResolver();
        resolver.setViewClass(ThymeleafTilesView.class);
        resolver.setTemplateEngine(templateEngine());
        resolver.setOrder(1);
        return resolver;
    }

    @Bean
    public SpringTemplateEngine templateEngine() {
        SpringTemplateEngine templateEngine = new SpringTemplateEngine();
        Set<IDialect> dialects = new LinkedHashSet<IDialect>();
        dialects.add(new TilesDialect());
        templateEngine.setTemplateResolver(templateResolver());
        templateEngine.setAdditionalDialects(dialects); 

        return templateEngine;
    } 

    @Bean
    public TilesConfigurer tilesConfigurer() {
        ThymeleafTilesConfigurer configurer = new ThymeleafTilesConfigurer();
        configurer.setDefinitions("/WEB-INF/tiles/tiles-definitions.xml");
//      configurer.setCheckRefresh(true);

        return configurer;
    }

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/resources/**").addResourceLocations("/WEB-INF/resources/");
    }

    @Bean
    // for Spring general localization
    public MessageSource messageSource() {
        return new MultilanguageMessageSource();
    }

}

這樣的配置根本不起作用,在eclipse控制台中給出以下錯誤輸出:

03:28:29 DEBUG filter jar: slf4j-api-1.7.12.jar -> false
03:28:29 DEBUG filter jar: logback-core-1.1.3.jar -> false
Oct 18, 2017 3:28:29 AM org.apache.jasper.servlet.TldScanner scanJars
INFO: At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
Oct 18, 2017 3:28:29 AM org.apache.catalina.core.ApplicationContext log
INFO: Spring WebApplicationInitializers detected on classpath: [com.mycompany.web.WebAppInitializer@1278f9b]
Oct 18, 2017 3:28:30 AM org.apache.catalina.core.ApplicationContext log
INFO: Initializing Spring root WebApplicationContext
Oct 18, 2017 3:28:30 AM org.apache.catalina.core.StandardContext listenerStart
SEVERE: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener
java.lang.NoSuchMethodError: org.slf4j.spi.LocationAwareLogger.log(Lorg/slf4j/Marker;Ljava/lang/String;ILjava/lang/String;Ljava/lang/Throwable;)V
    at org.apache.commons.logging.impl.SLF4JLocationAwareLog.info(SLF4JLocationAwareLog.java:159)
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:285)
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:106)
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4851)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5314)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1408)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1398)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)

Oct 18, 2017 3:28:30 AM org.apache.catalina.core.StandardContext startInternal
SEVERE: One or more listeners failed to start. Full details will be found in the appropriate container log file
Oct 18, 2017 3:28:30 AM org.apache.catalina.core.StandardContext startInternal
SEVERE: Context [/WEB] startup failed due to previous errors
Oct 18, 2017 3:28:30 AM org.apache.catalina.core.ApplicationContext log
INFO: Closing Spring root WebApplicationContext
Oct 18, 2017 3:28:30 AM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["http-nio-8081"]
03:28:30 INFO  Tomcat 8.0.44 started and listening on port 8081
03:28:30 INFO  WEB runs at:
03:28:30 INFO    http://localhost:8081/WEB
03:28:30 DEBUG Tomcat 8.0.44 started.
Run 'gradle appStop' to stop the server.

以下是我的build.gradle的摘錄:

    compile group: 'org.thymeleaf', name: 'thymeleaf', version: '3.0.8.RELEASE'
    compile group: 'org.thymeleaf', name: 'thymeleaf-spring4', version: '3.0.8.RELEASE'
    compile group: 'org.thymeleaf.extras', name: 'thymeleaf-extras-tiles2', version: '2.1.1.RELEASE'
    compile group: 'org.thymeleaf.extras', name: 'thymeleaf-extras-tiles2-spring4', version: '2.1.1.RELEASE'

    compile group: 'org.apache.tiles', name: 'tiles-core', version: '2.2.2'
    compile group: 'org.apache.tiles', name: 'tiles-jsp', version: '2.2.2'
    compile group: 'org.apache.tiles', name: 'tiles-api', version: '2.2.2'
    compile group: 'org.apache.tiles', name: 'tiles-servlet', version: '2.2.2'

它(java.lang.NoSuchMethodError:org.slf4j.spi.LocationAwareLogger.log)看起來像slf4j記錄器錯誤。 由於類路徑中有兩個不同版本的slf4j-api jar,我曾經遇到過類似的錯誤。 一次檢查您的slf4j依賴項。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM