null
null

Reputation: 3517

Thymeleaf and Spring4 configuration

I've been trying to utilise Thymeleaf in a web that I'm playing with and can't quite seem to get my head around the configuration / setup.

Previously I've used the web folder for storage of assets and jsp/html etc but this now seems to be redundant as the views folder has moved to resources. Is this accurate?

My structure looks something like this:

src-main-java-various controllers/models etc
src-main-resources-Meta-inf - persistence.xml
src-main-resources-spring-config.xml
src-main-resources-views-test.html etc etc
src-main-webapp-assets-css - now in the wrong place?
src-main-webapp-WEB-INF-html/jsp = now irrelevant?

Apologies if this seems like a dumb question, I can't seem to find a decent tutorial that doesn't have conflicting information in it.

I'm basically trying to set up a simple web application using thyme leaf instead of jsp files. Any pointers in the right direction are gratefully received.

Thus far I have a ConfigClass containing

   @Bean
    public ViewResolver viewResolver() {
        ClassLoaderTemplateResolver templateResolver = new ClassLoaderTemplateResolver();
        templateResolver.setTemplateMode("XHTML");
        templateResolver.setPrefix("views/");
        templateResolver.setSuffix(".html");
        SpringTemplateEngine engine = new SpringTemplateEngine();
        engine.setTemplateResolver(templateResolver);

        ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
        viewResolver.setTemplateEngine(engine);
        return viewResolver;
    }

which seems to be the key behind everything but as it's from a tutorial I'm not sure what is good/bad/incorrect/bad practice and so on.

Upvotes: 2

Views: 1182

Answers (2)

Bnrdo
Bnrdo

Reputation: 5474

The html files I usually put under resources folder are for email templates - these are not the views of your web application. Views should stay under webapp/WEB-INF folder.

In order to load the views from webapp/WEB-INF (from ServletContext, just like any usual SpringMVC applications), use ServletContextTemplateResolver. ClassLoaderTemplateResolver is used if your templates are in classpath (e.g. email templates).

Here is my production config

@Bean
public ViewResolver viewResolver() {
   ServletContextTemplateResolver templateResolver = new ServletContextTemplateResolver();
   templateResolver.setTemplateMode("HTML5");
   templateResolver.setPrefix("/WEB-INF/html/");
   templateResolver.setSuffix(".html");
   SpringTemplateEngine engine = new SpringTemplateEngine();
   engine.setTemplateResolver(templateResolver);

   ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
   viewResolver.setTemplateEngine(engine);
   return viewResolver;
}

My directory

src-main-java --> Java classes (Spring controllers, etc.)
src-main-resources --> xml configs
src-main-webapp-css --> CSS files
src-main-webapp-js --> Javascript files
src-main-webapp-WEB-INF-views --> HTML5 files

Upvotes: 1

Saravana
Saravana

Reputation: 12817

Try Spring Boot which takes care of all default configuration and dependencies as well.

Spring Boot Get started here, to use Thymeleaf add below dependency in pom file

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

Spring Boot configures rest everything.

Once you are familiar with it you can override default configurations

Upvotes: 0

Related Questions