我有一个定义为服务的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易于访问?
答案 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