2013-10-10 3 views
0

В Spring MVC с средой FreeMarker у меня есть собственный TagLib, который обрабатывает шаблон ftl с данными и записывает результат в контексте JSP тега.Spring MVC & FreeMarker & Custom TagLib

Когда я вызываю этот тег из разрешенного представления (значение из шаблона, отображаемого контроллером), поведение абсолютно корректно.

controller 
    -> FTL 
     -> TagLib 

Но когда я называю ее изнутри шаблона для обработки другого экземпляра того же тега, я получил сообщение об ошибке (тэг не определен), и когда я добавляю #assign заявления в FTL, Я также получил ошибку (JspTagLibs - null).

controller 
    -> FTL 
     -> TagLib 
      -> FTL 
       -> TagLib (crash!) 

Как я могу это решить?

Заранее спасибо

ответ

0

Чтобы позвонить в JSP-теги из FTL, требуется специальный контекст шаблона (данные-модель, в терминологии FTL), который реализует это. Я полагаю, что Spring дает такой контекст для начального вызова. Но если вы начнете с нового контекста шаблона (со свежим freemarker.core.Environment фактически) во втором случае, то у вас не будет поддержки. Если вам не нужен свежий контекст шаблона, вы можете получить Environment выше со статическим Environment.getCurrentEnvironment(), а затем использовать Environment. include для вызова второго FTL. Однако тогда вы будете использовать тот же набор созданных шаблоном переменных, что и в самом верхнем FTL. (Это может быть несколько улучшено, если 2-й FTL просто определяет макрос и вызывает его, потому что макрос может по крайней мере иметь локальные сети.) Таким образом, вы можете просто повторить использование dataModel с более высоким Environment (используя Environment.getDataModel()), когда вы вызываете второй FTL. Я думаю, это должно сработать ... никогда не пробовал.

Смежные вопросы