Требует ли Spring Formatting SPI использование тегов JSP или что?

Я новичок в Spring и пытаюсь использовать Spring Formatting SPI для синтаксического анализа слоя пользовательского интерфейса и печати значений.

Я определил пользовательский форматтер, и сторона синтаксического анализа работает правильно, и если я делаю прямой вызов conversionService.convert(someObject, String.class), то значение преобразуется (т.е. печатается()) правильно с использованием форматирования, которое я определил.

Однако в моем шаблоне я отображаю только представление объекта toString(), а не строку из зарегистрированного вызова conversionService.convert().

Я использую Mustache в качестве шаблонизатора вместо Velocity или Freemarker (слава Богу). Привязан ли SPI форматирования к тегам JSP и / или мне нужно расширить библиотеку Mustache, которую я использую, для поддержки тегов привязки / формы Spring, чтобы это работало правильно?

Я просмотрел документацию и искал повсюду и не могу найти никакой информации по этому поводу, но приношу свои извинения, если мне не хватает навыков 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, поэтому после этого Spring больше не участвует. На этом этапе все дело в том, чтобы Jmustache выяснил, как генерировать вывод, используя синтаксис вашего шаблона и значения вашей модели. Код Jmustache немного запутан и труден для понимания, но я думаю, что если вы посмотрите на подклассы «Template.Segment», определенные в классе Mustache, вы увидите, где значения объекта превращаются в строки с использованием String.valueOf(Object) в строке 568:

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

String.valueOf(Object) просто вызывает toString() для переданного объекта (если он не нулевой):

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

Я думаю, у вас есть два варианта. Обработайте все преобразования String самостоятельно в своем контроллере, прежде чем заполнять свою модель, а затем убедитесь, что ваша модель заполнена только значениями String. Или вы можете попытаться расширить или изменить код Jmustache, чтобы он использовал API преобразования Spring для обработки преобразований в строки вместо использования String.valueOf().

person sdouglass    schedule 30.03.2012
comment
На самом деле мы создали собственное представление пружины усов на основе sps, в котором используется mustache.java, но ваш ответ применим и к этой реализации. Спасибо. - person Walden; 30.03.2012