Требует ли Spring Formatting SPI использования тегов JSP или как? - PullRequest
2 голосов
/ 21 марта 2012

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

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

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

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

Я проверил документацию и провел поиск по всему, и не могу найти никакой информации по этому вопросу, но я приношу свои извинения, если мои навыки RTFM / Google отсутствуют.

1 Ответ

1 голос
/ 30 марта 2012

Прежде всего, если вы посмотрите на файл 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 методу Jmustache Template "execute ()", поэтому Spring больше не задействуется после этой точки. В этот момент все дело в том, чтобы Jmustache выяснил, как генерировать выходные данные, используя синтаксис вашего шаблона и значения модели. Код Jmustache немного запутан и труден для понимания, но я думаю, что если вы посмотрите на подклассы «Template.Segment», определенные в классе Mustache, вы увидите, где значения Object превращаются в Strings с помощью 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 ().

...