Spring Formatting SPI изисква ли използването на JSP тагове или какво?

Нов съм в Spring и се опитвам да използвам SPI за форматиране на Spring за анализ на слоя на потребителския интерфейс и отпечатване на стойности.

Дефинирах персонализиран форматиращ инструмент и страната за анализиране работи правилно и ако извърша директно conversionService.convert(someObject, String.class) извикване, тогава стойността се преобразува (т.е. print()ed) правилно с помощта на форматиращия инструмент, който дефинирах.

Въпреки това, в моя шаблон получавам само представянето на toString() на обекта, а не String от регистрираното conversionService.convert() извикване.

Използвам Mustache като машина за шаблони вместо Velocity или Freemarker (слава Богу). Formatting SPI свързан ли е с JSP тагове и/или трябва ли да разширя библиотеката Mustache, която използвам, за да поддържа Spring bind/form тагове, за да може това да работи правилно?

Разрових документацията и претърсих навсякъде и не мога да намеря информация за това, но се извинявам, ако уменията ми за RTFM/Google липсват.


person Walden    schedule 21.03.2012    source източник
comment
Можете ли да предоставите някои подробности за това как интегрирате Mustache и Spring MVC? Използвате ли по някакъв начин mustache.js или използвате Java порт от това?   -  person sdouglass    schedule 29.03.2012
comment
Ние използваме mustache.java (github.com/spullara/mustache.java) и подходящо преназначен пролетен изглед на мустаци (github.com/sps/mustache-spring-view) .   -  person Walden    schedule 29.03.2012


Отговори (1)


Първо, ако погледнете файла pom.xml за тази библиотека на Mustache Spring View, той не използва 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‹String, Object› към метода „execute()“ на Jmustache Template, така че Spring не участва повече след тази точка. В този момент всичко е свързано с това, че Jmustache измисля как да генерира изход, използвайки синтаксиса на вашия шаблон и стойностите на вашия модел. Кодът на Jmustache е малко сложен и труден за следване, но мисля, че ако погледнете подкласовете "Template.Segment", дефинирани в класа Mustache, ще видите къде стойностите на Object се превръщат в низове, използвайки String.valueOf(Object) на ред 568:

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

String.valueOf(Object) просто извиква toString() на предадения обект (ако не е null):

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

Мисля, че имаш два варианта. Обработете сами всички преобразувания на низове във вашия контролер, преди да попълните вашия модел, и след това се уверете, че сте попълнили вашия модел само със стойности на низ. Или можете да опитате да разширите или модифицирате кода на Jmustache, за да го накарате да използва API за преобразуване на Spring, за да обработва преобразуванията в низове, вместо да използва String.valueOf().

person sdouglass    schedule 30.03.2012
comment
Ние всъщност създадохме собствен изглед на пролетта на мустаци, базиран на този на sps, който използва mustache.java, но вашият отговор се отнася и за тази реализация. Благодаря. - person Walden; 30.03.2012