Как вызвать бин @Service из Thymeleaf под Spring Boot - PullRequest
0 голосов
/ 16 декабря 2018

У меня есть bean-компонент, который определен как сервис:

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

Возможно подключить его в моем приложении и использовать его:

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

Когда я пытаюсь использовать егов шаблоне Thymeleaf я получаю это сообщение об ошибке:

org.springframework.expression.spel.SpelEvaluationException: EL1057E: В контексте не зарегистрирован преобразователь компонента для разрешения доступа к 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);

Я получаю сообщение об ошибке независимо от того,попробуйте получить доступ к компоненту напрямую или после setVariable("fileHandling").Синтаксис, который я использую, соответствует тому, что я вижу в главе 5 https://www.thymeleaf.org/doc/articles/springmvcaccessdata.html.

Я видел похожие вопросы, которые относятся к базовому SPEL (этот один ) или без ответа вопрос, специфичный для Thymeleaf.Я бы хотел избежать альтернативы для перехода от бина к статическому классу и использования ${T(org.foo.bar.package.FileHandling).doSomething()}.

Как мне решить эту проблему или сделать бин доступным?

1 Ответ

0 голосов
/ 16 декабря 2018

«Вызов боба из Thymeleaf под Spring Boot» также означает «Вызов боба из Thymeleaf под Spring MVC».Например:

Интерфейс

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...