Есть ли способ вызвать служебный метод в шаблоне TEXT Thymeleaf?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Есть ли способ вызвать служебный метод в шаблоне TEXT Thymeleaf?

Сообщение Anonymous »

У меня есть приложение, предназначенное для преобразования ответов API в удобочитаемый текст. Для этой цели я вызываю данные третьих сторон, строю на их основе модель и запускаю шаблон в контексте через org.thymeleaf.TemplateEngine.
Пример:

Код: Выделить всё

public Optional process(String template, Map model) {
Context thymeleafContext = new Context();
thymeleafContext.setVariables(model);

try {
return Optional.of(templateEngine.process(template, thymeleafContext););
} catch (TemplateProcessingException e) {
log.error(e.getMessage());
}

return Optional.empty();
}
Для этой цели у меня есть несколько текстовых шаблонов Thymeleaf org.thymeleaf.templatemode.TemplateMode#TEXT (обратите на это внимание), помещенных в отдельные файлы .txt. .
Предположим, у меня есть такой шаблон: Год рождения: [[${bornYear}}]]. Теперь мне нужно привести значение переменнойbornYear к определенному шаблону. Для этой цели у меня есть такой полезный метод

Код: Выделить всё

public class Utils {

private Utils() {}

public static String cast(String source, String pattern) {
return "";
}
}
и я предполагаю, что смогу выполнить этот служебный метод в шаблоне. Однако я не могу сделать это возможным, по крайней мере получаю исключение при обработке шаблона.
Что я пробовал:
  • Год рождения шаблона: [[${Utils.cast(bornYear, 'dd-MM-yyyy')}]].
  • Год рождения шаблона: [[${T (com.example.Utils).cast(bornYear, 'дд-ММ-гггг')}]]. Это приводит к org.thymeleaf.Exceptions.TemplateProcessingException: создание экземпляров новых объектов и доступ к статическим классам или параметрам запрещены в этом контексте.
  • Определите Utils как Spring Bean и настройте шаблон таким образом: Год рождения: [[${utils.cast(bornYear, 'dd-MM-yyyy')}]] или Год рождения: [[${@utils.cast(bornYear, 'дд-ММ-гггг')}]]. Это приводит к ошибке: Вызвано: org.springframework.expression.spel.SpelEvaluationException: EL1057E: в контексте не зарегистрирован преобразователь bean-компонента для разрешения доступа к bean-компоненту «Utils».
Конфигурация TemplateResolver:

Код: Выделить всё

@Bean
public ClassLoaderTemplateResolver templateResolve() {
ClassLoaderTemplateResolver templateResolver = new ClassLoaderTemplateResolver();
templateResolver.setPrefix("templates/");
templateResolver.setSuffix(".txt");
templateResolver.setTemplateMode(TemplateMode.TEXT);
templateResolver.setCharacterEncoding("UTF-8");
templateResolver.setOrder(1);
templateResolver.setCheckExistence(true);

return templateResolver;
}
Мои вопросы:

[*]Можно ли вызвать собственный код, учитывая, что я использую TemplateMode.TEXT?
[*]Если да, то как это сделать правильно?
[*]Есть предложения?

Заранее спасибо!

Подробнее здесь: https://stackoverflow.com/questions/792 ... f-template
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»