Spring Formatting SPI是否需要使用JSP标记或什么?

时间:2012-03-21 01:20:48

标签: java spring jsp user-interface mustache

我是Spring的新手,并尝试使用Spring Formatting SPI进行UI层解析和值的打印。

我已经定义了一个自定义格式化程序,并且解析端正常工作,如果我进行直接conversionService.convert(someObject, String.class)调用,则使用我定义的格式化程序正确转换值(即print()ed)。

但是,在我的模板中,我只显示对象的toString()表示,而不是已注册的conversionService.convert()调用中的字符串。

我使用Mustache作为模板引擎而不是Velocity或Freemarker(感谢上帝)。格式化SPI是否与JSP标记相关联和/或我是否需要扩展我正在使用的Mustache库以支持Spring绑定/表单标记以使其正常工作?

我已经搜索了文档并搜索了所有相关信息,但是如果我的RTFM / Google技能缺乏,我很抱歉。

1 个答案:

答案 0 :(得分:1)

首先,如果您查看该Mustache Spring View库的pom.xml文件,它不使用Mustache.java,它实际上是使用Jmustache:

https://github.com/sps/mustache-spring-view/blob/master/pom.xml

<dependency>
    <groupId>com.samskivert</groupId>
    <artifactId>jmustache</artifactId>
    <version>${jmustache.version}</version>
</dependency>

你可以在这里找到Jmustache:

https://github.com/samskivert/jmustache

视图只是将您的模型传递为Map&lt; String,Object&gt;到Jmustache模板“execute()”方法,所以在那之后Spring不再涉及了。那时,所有关于Jmustache都会使用您的模板语法和模型值来确定如何生成输出。 Jmustache代码有点复杂且难以理解,但我认为如果查看Mustache类中定义的“Template.Segment”子类,您将看到Object值使用String.valueOf(Object)转向字符串的位置在第568行:

https://github.com/samskivert/jmustache/blob/master/src/main/java/com/samskivert/mustache/Mustache.java

String.valueOf(Object)只调用传入的Object上的toString()(如果它不为null):

http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#valueOf%28java.lang.Object%29

我认为你有两种选择。在填充模型之前,先在控制器中处理所有String转换,然后确保仅使用String值填充模型。或者,您可以尝试扩展或修改Jmustache代码,以使其使用Spring的转换API来处理对字符串的转换,而不是使用String.valueOf()。