如何解决“@environment”问题? Spring Boot 应用程序中 Thymeleaf 模板中的 bean

发布于 2025-01-17 19:37:01 字数 1505 浏览 0 评论 0原文

我有一个无头的Spring Boot应用程序(仅显示REST API),但是我正在使用Thymeleaf进行某些电子邮件模板。

我已经包含

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

在依赖项中。

当我在模板中加入@environment时,我会收到错误

Caused by: org.springframework.expression.spel.SpelEvaluationException: EL1057E: No bean resolver registered in the context to resolve access to bean 'environment'

,例如,我的模板代码

<p>
  <a th:href="${@environment.getProperty('system.clientUrl')} + '/verify?action=accept&verificationCode=' + ${verificationCode}">Verify</a>
</p>

system.clienturlapplication.properties < /代码>文件。

胸腺的其他方面似乎工作正常(包括当我在资源捆绑中定义客户端URL时)。

对于模板中引用的其他对象,我将传递模型对象模型对象的set&lt; string,对象&gt;

Map<String, Object> templateModel = new HashMap<String, Object>();
    templateModel.put("verificationCode", emailVerification.getVerificationCode());

我想,我也可以传递环境或也可以使用clienturl,但是我假设@environment始终可用于Thymeleaf Renderer。

更新

我的渲染代码是

Context thymeleafContext = new Context();
thymeleafContext.setVariables(templateModel);
String htmlBody = thymeleafTemplateEngine.process(templateName, thymeleafContext);

我需要传递到上下文吗?

I have a Spring boot application that is headless (only presenting REST APIs), but I am using Thymeleaf for some email templates.

I have included

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

in my dependencies.

When I include @environment in my template, I get the error

Caused by: org.springframework.expression.spel.SpelEvaluationException: EL1057E: No bean resolver registered in the context to resolve access to bean 'environment'

My template code is, for example,

<p>
  <a th:href="${@environment.getProperty('system.clientUrl')} + '/verify?action=accept&verificationCode=' + ${verificationCode}">Verify</a>
</p>

where system.clientUrl is defined in the application.properties file.

Other aspects of Thymeleaf seem to work just fine (including when I defined the client URL in a resources bundle).

For other objects referenced in the template, I am passing a Set<String,Object> of template model objects.

Map<String, Object> templateModel = new HashMap<String, Object>();
    templateModel.put("verificationCode", emailVerification.getVerificationCode());

I suppose, I could pass the Environment or just the clientUrl in too, but I assumed that @environment is always available to the Thymeleaf renderer.

Update

My rendering code is

Context thymeleafContext = new Context();
thymeleafContext.setVariables(templateModel);
String htmlBody = thymeleafTemplateEngine.process(templateName, thymeleafContext);

Is there something I need to pass to the context?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文