2015-01-01 3 views
1

У меня есть консольное приложение, которое использует тимелеар для создания шаблонов электронной почты.Как зарегистрировать услугу преобразования для SpringTemplateEngine?

из моего понимания, только механизм шаблонов весны может использовать службы преобразования для применения глобального форматирования по переменным контекста тимелеафа.

Как я могу зарегистрировать свою услугу конвертации с помощью механизма шаблонов пружин?

// init the template engine 
templateEngine = new SpringTemplateEngine(); 
templateResolver = new ClassLoaderTemplateResolver(); 
templateEngine.addTemplateResolver(templateResolver); 

// generate the template 
Context ctx = new Context(locale); 
// i would like, for example, to format dates 
ctx.setVariable("date", new Date()); 
String text = this.templateEngine.process(templateName, ctx); 
+0

Не построить '' SpringTemplateEngine' и ClassLoaderTemplateResolver' себя, пусть весна сделайте это и просто вставьте его в ваши бобы. Чтобы использовать преобразование, если я не ошибаюсь, вы должны использовать диалоговом окне «Весна», чтобы включить это. –

+0

У меня такая же проблема - также использование Thymeleaf для отправки писем наряду со стандартным контекстом Thymeleaf для обычных материалов WebMVC. Странно, что две конфигурации Thymeleaf, похоже, содержат разные ConversionServices. В WebMVC добавлено множество полезных вещей, таких как ZonedDateTime-> String, к которым я не могу получить доступ в почтовом контексте ... стыдно, что вы не нашли решения для использования стандартной службы преобразования ... – meyertee

ответ

2

Получается, что пружинный шаблон двигателя не нужен вообще. Мне просто нужно, чтобы добавить свою службу преобразования в диалекте thymeleaf по умолчанию:

Set<IDialect> dialects = this.templateEngine.getDialects(); 
StandardDialect standardDialect = (StandardDialect) dialects.iterator().next(); 
IStandardConversionService conversionService = new MyConversionService(); 
standardDialect.setConversionService(conversionService); 

в моей службе преобразования, я использовал мой конвертер. если он не может преобразовать объект, я Откат к преобразователю по умолчанию:

public MyConversionService implements IStandardConversionService { 
    GenericConversionService myConverter = new MyConverter(); 
    StandardConversionService standardConversionService = new StandardConversionService(); 

    @Override 
    public <T> T convert(Configuration configuration, IProcessingContext processingContext, Object object, Class<T> targetClass) { 

     if (myConverter.canConvert(object.getClass(), targetClass)) { 
      return myConverter.convert(object, targetClass); 
     } 

     return standardConversionService.convert(configuration, processingContext, object, targetClass); 
    } 
} 

то в моем шаблоне используется синтаксис двойной скобки, чтобы применить преобразование:

${{variable}} 

thymeleaf весной зависимость по-прежнему требуется, поскольку преобразователь интерфейсов являются частью весны:

<dependency> 
    <groupId>org.thymeleaf</groupId> 
    <artifactId>thymeleaf-spring4</artifactId> 
    <version>2.1.4.RELEASE</version> 
</dependency> 
0

Если вы используете Spring Framework + thymeleaf, легко добавлять конвертеры Ваши проекты, путем простого создания подкласс that's простирается от Formatter, а затем зарегистрировать свой класс как боб в своем классе WebMvcConfigurerAdapter и перекрываться на метод addFormatters (FormatterRegistry реестр)

public class DateFormatter implements Formatter<Date> { 

public DateFormatter() { 
    super(); 
} 

@Override 
public Date parse(final String text, final Locale locale) throws ParseException { 
    final SimpleDateFormat dateFormat = createDateFormat(locale); 
    return dateFormat.parse(text); 
} 

@Override 
public String print(final Date object, final Locale locale) { 
    final SimpleDateFormat dateFormat = createDateFormat(locale); 
    return dateFormat.format(object); 
} 

private SimpleDateFormat createDateFormat(final Locale locale) { 
    final String format = "dd/MM/yyyy"; 
    final SimpleDateFormat dateFormat = new SimpleDateFormat(format, locale); 
    dateFormat.setLenient(false); 
    return dateFormat; 
} 

}

@EnableWebMvc 

@Configuration класса ConfiguracionWeb общественного расширяет WebMvcConfigurerAdapter реализует ApplicationContextAware {

@Autowired 
MapeadorObjetos mapeadorObjetos; 

@Autowired 
Environment env; 

@Override 
public void addFormatters(FormatterRegistry registry) { 
    super.addFormatters(registry); 
    registry.addFormatter(dateFormatter()); 
} 

@Bean 
public DateFormatter dateFormatter() { 
    return new DateFormatter(); 
} 

}

, а затем вы можете использовать на ваш взгляд, как этот $ {{переменная}}

Вы можете видеть, что это документы http://www.thymeleaf.org/doc/tutorials/3.0/thymeleafspring.html#configuring-a-conversion-service

Смежные вопросы