我正在尝试使用自定义格式化程序转换地图。
我创建了一个@LongCurrency Annotation,它可以像这样转换长值:
长 - >串
22 - > 00,22
3310 - > 33,10
字符串 - >长
3 - > 3
22,11 - > 2211
(Custom Annotation-driven Formatting Spring MVC)
到目前为止一切正常。现在我想用该格式化器转换一个Map。这是一些伪代码,它应该显示我想要完成的任务。
@LongCurrency
private Map<Integer, Long> test;
//only to make clear what I am trying to do.
private Map<Integer, @LongCurrency Long> test;
第二种方法可能是使用Thymeleaf的转换实用程序对象。 http://www.thymeleaf.org/doc/thymeleafspring.html#the-conversion-service
我尝试过这样的事情:
控制器:
model.addAttribute("test", 3333L);
Thymeleaf:
<td th:text="${#conversions.convert(${test},LongCurrency)}}"></td>
但它不起作用。 错误消息:org.thymeleaf.exceptions.TemplateProcessingException:无法解析为表达式:“$ {#conversions.convert($ {test},LongCurrency)}}”
我会感谢一方或双方的帮助或想法。
EDIT1:“正常”注释的长值有效
Bean:
@LongCurrency
private long test2;
Thymeleaf
<div th:text="${{test2}}" >
答案 0 :(得分:2)
我有第三种方式为我工作。我创建了一个LongCurrencyService,它调用我的Formatter-class的解析和打印方法。
@Named
@Singleton
public class LongCurrencyService {
public static String LongToStringCurrency(Long value) {
LongCurrencyFormatter longCurrencyFormatter = new LongCurrencyFormatter();
return longCurrencyFormatter.print(value, Locale.GERMAN);
}
public static Long StringToLongCurrency(String value) throws ParseException {
LongCurrencyFormatter longCurrencyFormatter = new LongCurrencyFormatter();
return longCurrencyFormatter.parse(value, Locale.GERMAN);
}
}
在我的Thymeleaf中,我使用那个EL:
<h1 th:text="${@longCurrencyService.LongToStringCurrency(test)}"></h1>
根据需要打印33,33。
我的方式对我有用,但如果我接受自己的答案,我就不会这样做。 这不是我的问题的答案,如何用格式化程序注释地图。