Apache Tiles: изменить страницу шаблона во время выполнения - PullRequest
2 голосов
/ 22 октября 2010

У меня вопрос: предположим, что в весенней среде MVC 3.0 я управляю представлениями с помощью плиток: у меня есть XML-файл с определениями всех представлений.Каждое представление расширяет определенный шаблон.У меня есть два шаблона: один для рендеринга completeDOM () и один дляpartalDOM (.....). Проблема в том, что есть некоторые представления, которые могут быть получены в fullDOM и частичноDOM, но я не хочунаписать два аналогичных определения.

Я думал о динамическом подходе: внедрить шаблон представления во время выполнения, указав параметр http, который должен содержать имя шаблона.Если запрос содержит параметр, то Tiles должен переопределить шаблон, расширенный представлением, с шаблоном, обнаруженным по значению параметра http.

Некоторые предложения?

Ответы [ 3 ]

3 голосов
/ 24 апреля 2013

Я знаю, что это старый вопрос, но мне нужно было сделать именно это, поэтому я решил поделиться своим решением.

Tiles позволяет то, что они называют « композиция времени выполнения », что позволяет изменять определения. Таким образом, вы можете повторно использовать существующее определение и просто поменять местами шаблон:

<tiles:insertDefinition name="existingDefinition" template="alternateTemplate.jsp" />
2 голосов
/ 11 июля 2013

В Spring плитокКонфигуратор необходимо установить изменяемый контейнер:

<property name="useMutableTilesContainer" value="true"/>
<property name="checkRefresh" value="true"/>

А в вашем Spring Controller:

ModelAndView model = new ModelAndView();
MutableTilesContainer container = (MutableTilesContainer)ServletUtil.getContainer(request.getSession().getServletContext());
Attribute attribute = new Attribute("your template jsp");
HashMap<String, Attribute>  attributes = new HashMap<String, Attribute>();
attributes.put("body", attribute);
Definition definition = new Definition("your definition name", "your jsp", attributes);
definition.setExtends("your definition template name");
definition = PatternUtil.replacePlaceholders(definition, "your definition name", new Object());
container.register(definition, request, response);
model.setViewName("your definition name");
2 голосов
/ 13 апреля 2011

Я думаю, что составитель представления может помочь: http://tiles.apache.org/framework/tutorial/advanced/preparer.html

...