gpt4 book ai didi

java - Spring MVC 自定义格式化程序未触发

转载 作者:行者123 更新时间:2023-12-01 21:55:43 25 4
gpt4 key购买 nike

我正在尝试让自定义格式化程序在 Spring MVC 中工作。我看过几篇与此相关的帖子,包括:Custom Annotation-driven Formatting Spring MVC 。我已经追踪了我的应用程序,我知道格式化程序正在注册。因为我确信格式化程序已注册,所以我认为它的注释被忽略,但我不知道为什么。

这里是我如何注册格式化工厂的引用:

@Override
public void addFormatters(FormatterRegistry registry)
{
registry.addFormatterForFieldAnnotation(new PhoneNumberFormatAnnotationFormatterFactory());
}

注释:

@Target(value = { ElementType.FIELD })
@Retention(value = RetentionPolicy.RUNTIME)
public @interface PhoneNumber
{

}

格式化工厂:

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();
}

}

格式化程序:

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;
}

}

View 中的用法:
<tr>
<td>Phone:</td>
<td>${workOrderDetailBean.subscriberPhone}</td>
</tr>

调试器的图像: Image of the debugger showing the formatter as added

最佳答案

你需要做的两件事:

  1. 确保您的工厂注册了正确的类型。使用String.class而不是PhoneNumber.class (假设您的 Bean 将电话号码存储为 String )
  2. 请务必使用 <spring:eval expression="workOrderDetailBean.subscriberPhone" htmlEscape="false"/>

关于java - Spring MVC 自定义格式化程序未触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34418648/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com