Вложенные шаблоны в Tiles, почему атрибуты не определены во включенном шаблоне? - PullRequest
2 голосов
/ 27 октября 2010

Я использую Tiles 2 в своем веб-приложении, и базовая настройка, которую я получил в моем файле tile.xml, такова:

<tiles-definitions>
    <definition name="mainLayout" template="/jsp/layout.jsp">
        <put-attribute name="header" value=""/>
        <put-attribute name="menu" value="/jsp/defaultMenu.jsp" />
        <put-attribute name="content" value="" />
        <put-attribute name="footer" value="/jsp/footer.jsp" />
    </definition>

    <definition name="HomePage" extends="mainLayout">
        <put-attribute name="content" type="template" value="/jsp/home.jsp"/>
        <put-attribute name="homeClass" value="active" />
    </definition>

    ... rest omitted for brevity.

В layout.jsp, который определяет макет, я включаю меню в соответствующем месте.

<tiles:insertAttribute name="menu" />

Итак, затем в моем шаблоне меню я хотел использовать атрибут homeClass, определенный в tile.xml.

<tiles:insertAttribute name='homeClass'/>

но я получаю сообщение об ошибке, что атрибут homeClass не определен. Если я выполняю insertAttribute в моем layout.jsp, значение определяется правильно, но мне нужно, чтобы оно было определено в меню JSP, включенном в мой макет.

Итак, мой вопрос: Как я могу правильно передать атрибут homeClass не только в мой шаблон макета, но и в шаблон меню, включенный в шаблон макета?

Ответы [ 2 ]

3 голосов
/ 31 января 2011

Использование вложенных определений шаблонов (как не записывает) является ответом.Чтобы это работало, вам нужна версия DTD> = 2.1.
См. Вложенный шаблон листов Apache

3 голосов
/ 03 ноября 2010

Полагаю, вы можете использовать определения вложенных шаблонов:

<definition name="mainLayout" template="/jsp/layout.jsp">
        <put-attribute name="header" value=""/>

        <put-attribute name="menu">
            <definition template="/jsp/defaultMenu.jsp">
                <put-attribute name="homeClass" value="active"/>
            </definition>
         </put-attribute>

        <put-attribute name="content" value="" />
        <put-attribute name="footer" value="/jsp/footer.jsp" />
    </definition>
...