Я пытаюсь получить пользовательский форматтер, работающий в Spring MVC. Я рассмотрел несколько сообщений по этому вопросу, в том числе: Custom Annotation-driven Formatting Spring MVC. Я проследил свое приложение, и я знаю, что форматер регистрируется. Поскольку я уверен, что форматер зарегистрирован, я думаю, что его аннотация игнорируется, но я не знаю, почему.Spring MVC Custom Formatter не стреляет
Для справки здесь, как зарегистрировать форматтера завод:
@Override
public void addFormatters(FormatterRegistry registry)
{
registry.addFormatterForFieldAnnotation(new PhoneNumberFormatAnnotationFormatterFactory());
}
Аннотация:
@Target(value = { ElementType.FIELD })
@Retention(value = RetentionPolicy.RUNTIME)
public @interface PhoneNumber
{
}
Formatter Фабрика:
public class PhoneNumberFormatAnnotationFormatterFactory implements AnnotationFormatterFactory<PhoneNumber>
{
@Override
public Set<Class<?>> getFieldTypes()
{
Set<Class<?>> setTypes = new HashSet<Class<?>>();
// setTypes.add(String.class);
setTypes.add(PhoneNumber.class);
return setTypes;
}
@Override
public Printer<?> getPrinter(PhoneNumber annotation, Class<?> fieldType)
{
return new PhoneNumberFormatter();
}
@Override
public Parser<?> getParser(PhoneNumber annotation, Class<?> fieldType)
{
return new PhoneNumberFormatter();
}
}
Formatter:
public class PhoneNumberFormatter implements Formatter<String>
{
private static final Logger logger = Logger.getLogger(PhoneNumberFormatter.class);
@Override
public String print(String subject, Locale locale)
{
logger.debug("formatting phone number");
return subject + "BOO";
}
@Override
public String parse(String text, Locale locale) throws ParseException
{
return text;
}
}
Использование в представлении: <tr> <td>Phone:</td> <td>${workOrderDetailBean.subscriberPhone}</td> </tr>
Использование тега ' ' было решением. Спасибо Адаму. –
RhythmicDevil
@ adam-erstelle Вы уверены, что это безопасно? 'spring: eval' оценивает выражение Spring (SpEL), и здесь мы используем значение от пользователя. Для меня это похоже на то, что мы разрешаем пользователю выполнять любое выражение SpEL, которое является нарушением безопасности. Также отключить 'htmlEscaping' выглядит странно, потому что это может привести к XSS. –
P.S. Если это значение является входом в форму, вы можете просто использовать '', и он должен работать. –