Как я могу вставить переменную в стек значений в freemarker - PullRequest
1 голос
/ 19 августа 2010

В freemarker я хочу включить существующий шаблон из другого. Существующий шаблон предполагает, что он смотрит на вершину стека значений. Я действительно ищу функцию «Применить». Итак, у меня есть родительский шаблон:

<#list items as item>
<#include "/my/subtemplate.ftl"/>
</#list>

Как сделать так, чтобы подшаблон представлял элемент как верхний элемент в стеке значений, чтобы мне не нужно было копировать его и изменять каждую ссылку на 'свойство' элемента на item.myproperty?

Ответы [ 2 ]

2 голосов
/ 14 марта 2011

просто подтверждение «стека» - это ссылка на объект ValueStack, помещенный в контекст шаблона структурой Struts2. Он не существует вне Struts2.

В FreeMarker включенный шаблон разделяет состояние включаемого шаблона, такого как модель данных и переменные языка шаблона. К сожалению, нет никакого толчка или появления контекста, подобного этому, чтобы изменить контекст включенного шаблона. Вы можете использовать <#assign> или <#global> для размещения переменных в области действия шаблона, но они не заменят модель данных общего шаблона.

В простом FreeMarker, я думаю, вы бы реорганизовали подшаблон в макрос или функцию и <#import> передали элемент в качестве аргумента.

1 голос
/ 19 августа 2010

После поиска в Google и некоторого чтения кода у меня сработало следующее:

<#list items as item>
<#assign dummy=stack.push(item)/>
<#include "/my/subtemplate.ftl"/>
<#assign dummy=stack.pop()/>
</#list>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...