在百里香的视图中使用自定义格式化程序映射

时间:2014-09-02 09:30:50

标签: spring thymeleaf

我正在尝试使用自定义格式化程序转换地图。

我创建了一个@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}}" >

1 个答案:

答案 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。

我的方式对我有用,但如果我接受自己的答案,我就不会这样做。 这不是我的问题的答案,如何用格式化程序注释地图。