Переменная доступа Tiles 2 в шаблоне - PullRequest
0 голосов
/ 20 июля 2011

Я использую инфраструктуру Spring MVC с Apache Tiles 2. Я хочу, чтобы все контроллеры использовали одно и то же представление (разную логику, некоторую базовую презентацию). Я могу сделать это легко. Теперь я хочу иметь разные определения Tiles для каждого контроллера, использующие один и тот же файл JSP, но каждый из которых передает разные переменные шаблона (заголовок страницы, краткое описание и т. Д.). Это мой файл определения шаблона Tiles:

<tiles-definitions>

    <!-- Default Main Template -->
    <definition name=".mainTemplate" template="/WEB-INF/templates/main.jsp">
        <put-attribute name="shortTitle" value="Company ABC" type="string" />
        <put-attribute name="body" value="/WEB-INF/templates/blank.jsp" />
    </definition>

    <!-- Overriding Templates -->
    <definition name="index" extends=".mainTemplate">
        <put-attribute name="title" value="Company Alpha Bravo Charlie" type="string" />
        <put-attribute name="body" value="/WEB-INF/views/index.jsp" />
    </definition>

    <definition name="index2" extends=".mainTemplate">
        <put-attribute name="title" value="Company Other Page" type="string" />
        <put-attribute name="body" value="/WEB-INF/views/index.jsp" />
    </definition>

</tiles-definitions>

Я тогда пытаюсь получить это /WEB-INF/views/index.jsp:

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles" %>

<h1>
    Hello world, it's <tiles:getAsString name="title" />!  
</h1>

Когда я загружаю это в Tomcat и поднимаю страницу, я получаю длинный стек исключений. В верхней части стопки написано org.apache.tiles.impl.CannotRenderException: ServletException including path '/WEB-INF/templates/main.jsp'.} with root cause org.apache.tiles.template.NoSuchAttributeException: Attribute 'title' not found. Кто-нибудь знает, что происходит?

1 Ответ

0 голосов
/ 20 июля 2011

Затем я пытаюсь получить это /WEB-INF/views/index.jsp:

Как ты попробуешь это? В вашем контроллере вы бы указали имя представления Tiles, а не один из нескольких JSP Tiles, которые будут использоваться для отображения страницы:

@RequestMapping("index2")
public String index2() {
    // ...
    return "index2";
}
...