2014-09-11 3 views
0

Кто-нибудь был успешным в использовании dojo> 1.6 для декларативного создания виджетов с помощью инструментария MVC весны внутри шаблонов Freemarker?Freemarker/Spring MVC/Dojo integration

Точнее, Freemarker дроссели при переходе от старого стиля додзё (который мы использовали до сих пор), как в:

<@form.select path="fruit" dojoType="dojo.dijit.Select"/> 

синтаксису нового додзё (который мы хотели бы использовать), как в:

<@form.select path="fruit" data-dojo-type="dojo/dijit/Select"/> 

стоит отметить, что переход работает с простым HTML elemnts, как:

<div data-dojo-type="dojo/layout/TabContainer"/> 

Следовательно, кажется, что использование имен «пунктирных атрибутов» невозможно для внешних taglib, включенных в страницы FTL.

Может кто-нибудь подтвердить это, или, случайно, показать, как это можно сделать?

Большое спасибо.

+0

Что вы подразумеваете под «freemarker chokes»? Он вызывает ошибки? Если ошибок шаблона не возникает, посмотрите на источник, генерируемый freemarker, и покажите нам, что создает freemarker, и то, что вы хотели бы получить. Также каков источник формы. Выберите макрос (например, как выглядит импорт)? –

+0

Только для полноты, сообщение об ошибке, генерируемое Freemarker: «Анализ ошибок включал шаблон WEB-INF/ftl/welcome /./ form/searchform.ftl. Обнаружен« - »в строке 131, столбец 67 в WEB-INF/ftl/добро пожаловать/форма/searchform.ftl. Ожидал: «=». И form.select не является макросом FTL, а тегом, предоставленным библиотекой тегов Spring-MVC Form. – Mark

ответ

0

Yip, синтаксис FreeMarker 2.3 не может обрабатывать тире в именах параметров, поскольку они являются вычитаниями, а затем сравниваются в нем. Это невозможно даже изменить, не нарушая обратной совместимости. Как бы то ни было, FreeMarker 2.4 нацелен на то, что и некоторые другие проблемы, требующие синтаксических изменений, но это далеко.

В большинстве случаев используется date_foo вместо data-foo, а затем заменяются _-, когда они печатают имя атрибута. Однако @form.select не был написан вами, поэтому он может стать сложным. Хорошо, если вам повезло, это TemplateDirectiveModel, а затем вы можете написать свой собственный TemplateDirectiveModel, который делегирует ему после выполнения замены ... но если это макрос, вам не повезло.

Интересно, может ли 2.3.21 разрешить только foo\-bar\-baaz или что-то подобное в качестве идентификатора ... уродливое, но по крайней мере решение до 2.4.

+0

Спасибо за полезный комментарий. Ожидая 2.4, мы попробуем обходное решение, основанное на функции JavaScript onLoad(), которая обрабатывает атрибуты штрих-кода dojo. Если это сработает, я поделился бы кодом в anwser с этим вопросом. – Mark