Использование пружинного ленточного потока 2, Фортетера по типу поля эффективен , но Formatter for Field Annotation нет.Spring Formatter для полевой аннотации не работает в веб-потоке
getPrint и getParser не называется. (по типу поля, они называются)
Я потратил много времени на это, , но не имеет хороших результатов.
Bean для страницы
public TestBean {
@TestFormat
private String test;
...
}
Аннотация
@Target({ElementType.TYPE,ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
public @interface TestFormat {}
AnnotationFormatterFactory
public class TestFormatAnnotationFormatterFactory implements AnnotationFormatterFactory<TestFormat>,Serializable {
@Override
public Set<Class<?>> getFieldTypes() {
Set<Class<?>> set = new HashSet<Class<?>>();
set.add(TestFormat.class);
return set;
}
@Override
public Printer<?> getPrinter(TestFormat annotation, Class<?> fieldType) {
return new TestFormatter();
}
@Override
public Parser<?> getParser(TestFormat annotation, Class<?> fieldType) {
return new TestFormatter();
}
}
форматтера
public class TestFormatter implements Formatter<String>{
@Override
public String print(String str, Locale locale) {
return str.substring(0, str.indexOf("parsed")); // example
}
@Override
public String parse(String input, Locale locale) throws ParseException {
return input + "parsed"; // example
}
}
ApplicationFormatterRegistrar
public class ApplicationFormatterRegistrar implements FormatterRegistrar {
@Override
public void registerFormatters(FormatterRegistry registry) {
registry.addFormatterForFieldAnnotation(new TestFormatAnnotationFormatterFactory());
}
}
Конфигурация SpringMVC
<bean id="applicationConversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
<property name="formatterRegistrars">
<set>
<ref local="applicationFormatterRegistrar"/>
</set>
</property>
</bean>
<bean id="applicationFormatterRegistrar" class="package.ApplicationFormatterRegistrar"/>
Конфигурация
Пружина WebFlow
<bean id="defaultConversionService" class="org.springframework.binding.convert.service.DefaultConversionService" >
<constructor-arg ref="applicationConversionService"/>
</bean>
<webflow:flow-builder-services id="flowBuilderServices" conversion-service="defaultConversionService"/>
это может быть связано, но я не мог найти solution
Spring Web Flow 2.4.1
Spring 4.1.6
Thymeleaf 2.1.4
извините за мои неудачные перерывы. – user1451619
ваш ['getFieldTypes'] (http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/format/AnnotationFormatterFactory.html#getFieldTypes--) должен добавить' String.class' в вместо «TestFomat», в настоящее время это не так. Он представляет типы полей, которые можно аннотировать, в настоящее время вы говорите, что «TestFormat» может быть аннотирован с помощью «TestFormat». Если вы хотите, чтобы 'String' можно было аннотировать с помощью' TestFormat'. –
Это сработало! Я пропустил. Благодарим вас за точные указания. – user1451619