Распространение атрибута тайлов по цепочке включения - PullRequest
16 голосов
/ 16 декабря 2010

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

tiles-definitions.xml * * 1004

<definition name="page" template="/WEB-INF/tiles/layout/page.jsp">
  <put-attribute name="header" value="/WEB-INF/jsp/_include/header.jsp"/>
  <put-attribute name="footer" value="/WEB-INF/jsp/_include/footer.jsp"/>
</definition>

<definition name="tutorial" extends="page">
  <put-attribute name="title" value="Tutorial"/>
  <put-attribute name="body" value="/WEB-INF/jsp/tutorial.jsp"/>
</definition>

page.jsp представляет простую структуру страницы:

<html>
  <head><title><tiles:getAsString name="title"/></title></head>
  <body>
      <tiles:insertAttribute name="header"/>
      <tiles:insertAttribute name="body"/>
      <tiles:insertAttribute name="footer"/>
  </body>
</html>

Я пытаюсь прочитать заголовок также внутри подстраницы "header", но получаю следующую ошибку:

org.apache.tiles.template.NoSuchAttributeException: атрибут title не найден.

Вот как я пытаюсь получить доступ к атрибуту в header.jsp:

<tiles:getAsString name="title"/>

Ответы [ 2 ]

22 голосов
/ 21 января 2011

Чтобы распространить атрибут title на внутренние шаблоны, вам нужно добавить атрибут cascade="true" в тег title <put-attribute>, например:

<definition name="tutorial" extends="page">
  <put-attribute name="title" cascade="true" value="Tutorial"/>
  <put-attribute name="body" value="/WEB-INF/jsp/tutorial.jsp"/>
</definition>
5 голосов
/ 27 сентября 2012

Постарайтесь обновить файл определения плиток до 2,1 мин, поскольку каскад доступен с версии 2.1.

<!DOCTYPE tiles-definitions PUBLIC "-//Apache Software Foundation//DTD Tiles Configuration 2.1//EN" "http://tiles.apache.org/dtds/tiles-config_2_1.dtd">

...