Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

layout:decorate is not working in thymeleaf

I am trying to introduce a layout(as here) in my application using thymeleaf but couldn't get it working. I have already checked this post.

pom.xml

    <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>1.5.8.RELEASE</version>
        </parent> 
    ...
    <dependency>
        <groupId>nz.net.ultraq.thymeleaf</groupId>
        <artifactId>thymeleaf-layout-dialect</artifactId>
   </dependency>

This is my MvcConfig

@Configuration
public class MvcConfig extends WebMvcConfigurerAdapter {
    ...
    @Bean
    public LayoutDialect layoutDialect() {
        return new LayoutDialect();
    }
}

layout.html as given here. No changes. Added xmlns:th="http://www.thymeleaf.org on checking some article.

<!DOCTYPE html>
<html xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout" xmlns:th="http://www.thymeleaf.org">
<head>
  <title>Layout page</title>
</head>
<body>
  <header>
    <h1>My website</h1>
  </header>
  <div layout:fragment="content">
    <p>Page content goes here</p>
  </div>
  <footer>
    <p>My footer</p>
    <p layout:fragment="custom-footer">Custom footer here</p>
  </footer>  
</body>
</html>

I'm trying to replace the contents fragment as shown below in login.html

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout" xmlns:th="http://www.thymeleaf.org"
        layout:decorate="~{layout}">
    <head>
        <title>Application Login</title>
    </head>
    <body>
        <div layout:fragment="content">
            <div th:if="${param.error}">
                Invalid username and password.
            </div>
            <div th:if="${param.logout}">
                You have been logged out.
            </div>
            <form th:action="@{/login}" method="post">
                <div><label> User Name : <input type="text" name="username" value=""/> </label></div>
                <div><label> Password: <input type="password" name="password" value=""/> </label></div>
                <div><input type="submit" value="Sign In"/></div>
            </form>
         </div>   
    </body>
</html>

Am I missing anything?

like image 675
amdg Avatar asked Oct 15 '25 22:10

amdg


2 Answers

The following worked for me.

    <parent>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-parent</artifactId>
         <version>1.5.8.RELEASE</version>
   </parent>
   ...
   <!--<dependency>
            <groupId>nz.net.ultraq.thymeleaf</groupId>
            <artifactId>thymeleaf-layout-dialect</artifactId>
       </dependency>-->

    <properties>
        ...
        <thymeleaf-layout-dialect.version>2.2.2</thymeleaf-layout-dialect.version>
        <thymeleaf.version>3.0.9.RELEASE</thymeleaf.version>
    </properties>
like image 93
amdg Avatar answered Oct 18 '25 16:10

amdg


for works with thymeleaf and extend a view, you must(Spring boot):

Verify dependencies thymeleaft for spring boot:

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

This is for use directives authenticated in thymeleaf (example: sec:authorize)

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

This is important, for add dependencies dialect

<dependency>
    <groupId>nz.net.ultraq.thymeleaf</groupId>
    <artifactId>thymeleaf-layout-dialect</artifactId>
    <version>2.3.0</version>
</dependency>

now, we need to create the LayoutDialect bean in a @Configuration annotated class.

@Bean
public LayoutDialect layoutDialect() {
    return new LayoutDialect();
}

By last:

mvn clean install

and run server.

like image 20
Diego Santa Cruz Mendezú Avatar answered Oct 18 '25 16:10

Diego Santa Cruz Mendezú



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!