java - 如何将对象传递给 thymeleaf 模板并访问其属性?

标签 java templates thymeleaf

是否可以通过上下文将对象(例如用户)(包含 3 个字符串属性 - 名称、密码、详细信息)传递给 thymeleaf 模板 myContext.setVariable("user", myUser)并从模板访问它的属性,如下所示 <div th:text="${user.name}"/>

如果是这样我该怎么做?

我的对象包含很多属性,我试图避免创建包含很多变量的上下文。

我对 thymeleaf 非常陌生,所以感谢您的帮助。

最佳答案

如果您使用 spring 和 thymeleaf 那么它们应该像魅力一样为您工作。在这种情况下,它很简单:

    private static final VAR_USER = "user"

    @Autowired
    private SpringTemplateEngine templateEngine;

    ...

    public void method(User user,...) {
        Map<String, Object> variables;
        variables.put(VAR_USER, user);

        context.setVariables(variables);
        org.thymeleaf.context.Context context = new Context(locale);

        String evaluated = templateEngine.process("myTemplate", context);
    }

其中myTemplate指的是resources/mails/myTemplate.html,其内容如下所示:

<p th:text="#{email.userActivity.greeting}">Hello</p>

<p th:text="#{email.userActivity.text1}">Following user activity...</p>

<ul>
    ...
    <li th:text="#{email.userActivity.phone(${user.phoneNumber}?: #{error.not.provided})}">Phone number:</li>
    <li th:text="#{email.userActivity.membershipNumber(${user.membershipNumber}?: #{error.not.provided})}">Membership number:</li>
    ...
</ul>

<p th:text="#{email.userActivity.text2}">Thanks for taking care of this demand within the agreed period!</p>

<p th:text="#{email.userActivity.text3}">Regards</p>

和我的User实体

public class User implements Serializable {

...

    @Column(name = "membership_number")
    private String membershipNumber;

    @Column(name = "phone_number")
    private String phoneNumber;

...

}

然后,我的 Thymeleaf 配置:

package my.package.config;

import my.package.MyTemplateEngine;
import org.apache.commons.lang3.CharEncoding;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Description;
import org.thymeleaf.templatemode.TemplateMode;
import org.thymeleaf.templateresolver.ClassLoaderTemplateResolver;
import org.thymeleaf.templateresolver.ITemplateResolver;
import org.thymeleaf.templateresolver.StringTemplateResolver;

@Configuration
public class ThymeleafConfiguration {

    private MyTemplateEngine templateEngine;

    @Bean
    @Description("Thymeleaf template resolver serving HTML 5 emails from template file")
    public ITemplateResolver htmlTemplateResolver() {
        ClassLoaderTemplateResolver emailTemplateResolver = new ClassLoaderTemplateResolver();
        emailTemplateResolver.setPrefix("mails/");
        emailTemplateResolver.setSuffix(".html");
        emailTemplateResolver.setTemplateMode(TemplateMode.HTML);
        emailTemplateResolver.setCharacterEncoding(CharEncoding.UTF_8);
        emailTemplateResolver.setCheckExistence(true);
        return emailTemplateResolver;
    }

    @Description("Thymeleaf template resolver serving HTML 5 emails from input string")
    @Bean
    public ITemplateResolver stringTemplateResolver() {
        final StringTemplateResolver templateResolver = new StringTemplateResolver();
        templateResolver.setTemplateMode(TemplateMode.HTML);
        return templateResolver;
    }

    @Bean
    public MyTemplateEngine createTemplateEngine() {
        templateEngine = new MyTemplateEngine();
        return templateEngine;
    }
}

以及我使用的 Thymeleaf 版本:

<properties>

...
    <thymeleaf-layout-dialect.version>2.2.1</thymeleaf-layout-dialect.version>
    <thymeleaf.version>3.0.6.RELEASE</thymeleaf.version>
...

</properties>

<dependencies>
...
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>
    <dependency>
        <groupId>org.thymeleaf</groupId>
        <artifactId>thymeleaf</artifactId>
        <version>3.0.6.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.thymeleaf</groupId>
        <artifactId>thymeleaf-spring4</artifactId>
        <version>3.0.6.RELEASE</version>
    </dependency>
...
</dependencies>

关于java - 如何将对象传递给 thymeleaf 模板并访问其属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52736288/

相关文章:

c++ - 具有流运算符重载的模板类

javascript - 如何将 thymeleaf 片段加载到 js 变量中

java - 如何获取在 SSL 握手中生成的对称 key ?

c++ - 在程序中使用非类型模板参数而不分配给局部变量时出现意外结果?

c++ - 使用模板

java - Spring Boot + Thymeleaf 错误 java.lang.ClassNotFoundException : org. thymeleaf.dom.Attribute

java - 在 Spring Boot 应用程序中使用 @Valid 和 BindingResult 时出现表单输入验证问题

java.lang.NoSuchMethodError : android. app.Dialog.create

java - 推箱子 Java Performmove 错误

Java——适合字符缓冲区的大小