Динамическое составление страниц с использованием плиток - PullRequest
2 голосов
/ 16 июня 2011

Я новый пользователь плиток и люблю его до сих пор.Но сейчас я сталкиваюсь с проблемой, и я не уверен, что плитки - это правильный инструмент в моей руке для достижения моих целей.

Я хотел бы создать общую регистрационную форму, которая будет использоваться несколькими сайтами.,Эта форма регистрации будет немного отличаться на каждом сайте.Очевидно, что они могут использовать одни и те же файлы JSP и Java-коды.Моя цель - иметь файлы .properties, в которых я могу указать, какие фрагменты формы ввода следует включать в форму, а какие нет (для каждого сайта).

Есть ли способ динамической вставки атрибутов?

Я создал класс подготовки представления.Таким образом, я могу добавить / переопределить существующие атрибуты.

public class TestViewPreparer extends ViewPreparerSupport {
    public void execute(TilesRequestContext tilesContext, AttributeContext attributeContext) throws PreparerException {
        Attribute attribute = new Attribute("/WEB-INF/views/search-panel/holiday-type.jsp");
        attributeContext.putAttribute("rfFragment", attribute);
    }
}

Но это только добавление / переопределение только одного атрибута за раз.Кроме того, в файле шаблона я должен добавить следующую строку для каждого из них.

<tiles:insertAttribute name="rfFragment1" />
<tiles:insertAttribute name="rfFragment2" />
    //... etc

То, что я ищу, больше похоже на добавление списка Attribute s и включение их в строку шаблона.с петлей.Примерно так:

    <tiles:useAttribute id="fragments" name="rfFragments" classname="java.util.List" />
    <c:forEach var="fragment" items="${fragments}">
        <tiles:insertAttribute value="${fragment}" flush="true" /></c:forEach>

Моя проблема в том, что AttributeContext может принимать только один атрибут и не может иметь список атрибутов.Или я что-то упустил?

Надеюсь, я достаточно подробно описал свою проблему, учитывая детали.

1 Ответ

1 голос
/ 31 мая 2013

В настоящее время я работаю над аналогичной проблемой, пытаясь создать динамическое навигационное меню внутри плитки с помощью ViewPreparer.Согласно сообщению, указанному ниже, вы можете передавать ArrayLists через TilesRequestContext вместо использования AttributeContext.Я еще не совсем понял, как это работает, но, возможно, эти ссылки помогут тому, кто ищет это в будущем (у меня ушло навсегда, чтобы найти хорошие примеры)

Пример ViewPreparer

Внедрение контроллера с помощью Spring

Моя реализация:

public class HeaderController extends ViewPreparerSupport{
private EvalTypesService evalTypesService;

@Autowired
public HeaderController(EvalTypesService evalTypesService){
    this.evalTypesService = evalTypesService;
}

@Override
public void execute(TilesRequestContext tilesContext, AttributeContext attributeContext) throws PreparerException{
    List<EvalMasterEvaluationType> evalTypes = evalTypesService.getAllActiveEvalTypes();
    tilesContext.getRequestScope().put("evalTypes", evalTypes);
}

}

Определение в view.xml:

<definition name=".mainTemplate" template="/WEB-INF/views/main_template.jsp" preparer="myPathToController.HeaderController">
    <put-attribute name="header" value="/WEB-INF/views/tiles/header.jsp" />
    <put-attribute name="content" value="" />
    <put-attribute name="footer" value="/WEB-INF/views/tiles/footer.jsp" />
</definition>

Плитка Beans в сервлете отправки xml:

<bean class="org.springframework.web.servlet.view.tiles2.TilesViewResolver"/>

<bean class="org.springframework.web.servlet.view.tiles2.TilesConfigurer">
    <property name="definitions">
        <list>
            <value>/WEB-INF/views/**/views.xml</value>
        </list>
    </property>
    <property name="preparerFactoryClass" value="org.springframework.web.servlet.view.tiles2.SimpleSpringPreparerFactory" /></bean>

В плитке header.jsp:

<div id="nav">
<c:out value="${msg}"></c:out>
<ul>
    <c:forEach var="type" items="${evalTypes}">
    <li><a href="<s:url value="/evalTypes/${type.id}" />"><c:out value="${type.name}" /></a></li>

    </c:forEach>
</ul>

...