如何在Spring Boot下从Thymeleaf调用@Service bean

时间:2018-12-16 15:11:56

标签: spring-boot thymeleaf

我有一个定义为服务的bean:

@Service
public class FileHandling {
  public void doSomething() {
...

可以在我的应用程序中自动连线并使用它:

@Autowired
@Qualifier("fileHandling")
FileHandling fh;

当我尝试在Thymeleaf模板中使用它时,收到以下错误消息:

  

org.springframework.expression.spel.SpelEvaluationException:EL1057E:   没有在上下文中注册用于解析对bean的访问的bean解析器   'fileHandling'

这是我模板的相关部分:

<td th:text="${@fileHandling.doSomething()}">...</td>  

这是我访问模板引擎的方式:

final Context ctx = new Context();
ctx.setVariable("files", map);
ctx.setVariable("fileHandling",fh);

String html = templateEngine.process("flattopic", ctx);

无论我尝试直接访问Bean还是在setVariable("fileHandling")之后访问Bean,我都会收到错误消息。我使用的语法符合https://www.thymeleaf.org/doc/articles/springmvcaccessdata.html第5章中看到的语法。

我见过类似的问题,它们适用于基本SPEL(此one)或特定于Thymeleaf的unanswered问题。 从Bean切换到静态类的替代方法  我想避免使用${T(org.foo.bar.package.FileHandling).doSomething()}

我该如何解决这个问题或使Bean易于访问?

1 个答案:

答案 0 :(得分:0)

“在Spring Boot下从Thymeleaf调用bean”也是“在Spring MVC下从Thymeleaf调用bean”。例如:

接口

package com.example;

public interface UrlService {

    String getApplicationUrl();

}

您有组件MyConfiguration

package com.example;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class MyConfiguration {

    @Bean(name = "urlService")
    public UrlService urlService() {
        return () -> "domain.com/myapp";
    }

}

在Thymeleaf模板文件foo.html

<div th:text="${@urlService.getApplicationUrl()}">...</div>

来源:https://www.thymeleaf.org/doc/articles/springmvcaccessdata.html#spring-beans