Как автоматизировать импорт тела с помощью Apache Tiles и Spring MVC

У меня есть следующие плитки-def.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE tiles-definitions PUBLIC
   "-//Apache Software Foundation//DTD Tiles Configuration 2.0//EN"
   "http://tiles.apache.org/dtds/tiles-config
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE tiles-definitions PUBLIC
   "-//Apache Software Foundation//DTD Tiles Configuration 2.0//EN"
   "http://tiles.apache.org/dtds/tiles-config_2_0.dtd">
<tiles-definitions>
<definition name="default" template="/WEB-INF/jsp/layout.jsp">
    <put-attribute name="title" value="my webapp" />
    <put-attribute name="header" value="/WEB-INF/jsp/header.jsp" />
    <put-attribute name="menu" value="/WEB-INF/jsp/menu.jsp" />
    if(myPageName exists){
        <put-attribute name="body" value="/WEB-INF/jsp/" + myPageName + ".jsp" />
    else{
        <put-attribute name="body" value="/WEB-INF/jsp/error404.jsp" />
    }
    <put-attribute name="footer" value="/WEB-INF/jsp/footer.jsp" />
</definition>
</tiles-definitions>
0.dtd"> <tiles-definitions> <definition name="default" template="/WEB-INF/jsp/layout.jsp"> <put-attribute name="title" value="my webapp" /> <put-attribute name="header" value="/WEB-INF/jsp/header.jsp" /> <put-attribute name="menu" value="/WEB-INF/jsp/menu.jsp" /> <put-attribute name="body" value="/WEB-INF/jsp/hello.jsp" /> <put-attribute name="footer" value="/WEB-INF/jsp/footer.jsp" /> </definition> <definition name="contact" extends="default"> <put-attribute name="body" value="/WEB-INF/jsp/contact.jsp" /> </definition> <definition name="hello" extends="default"> <put-attribute name="body" value="/WEB-INF/jsp/hello.jsp" /> </definition> </tiles-definitions>

Как видите, на всех моих страницах меняется только тело. Есть ли способ автоматизировать это? (так что он автоматически включает jsp с именем запрошенной страницы или страницу с ошибкой, если она не существует?)

Спасибо!

РЕДАКТИРОВАТЬ: Подробнее о том, что я хочу сделать:

Как это сейчас: для каждой новой страницы моего веб-приложения я должен добавить новую страницу в свой файлtiles-def.xml. И каждый раз единственное, что он делает, это устанавливает тело с моей страницей контента.

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

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE tiles-definitions PUBLIC
   "-//Apache Software Foundation//DTD Tiles Configuration 2.0//EN"
   "http://tiles.apache.org/dtds/tiles-config_2_0.dtd">
<tiles-definitions>
<definition name="default" template="/WEB-INF/jsp/layout.jsp">
    <put-attribute name="title" value="my webapp" />
    <put-attribute name="header" value="/WEB-INF/jsp/header.jsp" />
    <put-attribute name="menu" value="/WEB-INF/jsp/menu.jsp" />
    if(myPageName exists){
        <put-attribute name="body" value="/WEB-INF/jsp/" + myPageName + ".jsp" />
    else{
        <put-attribute name="body" value="/WEB-INF/jsp/error404.jsp" />
    }
    <put-attribute name="footer" value="/WEB-INF/jsp/footer.jsp" />
</definition>
</tiles-definitions>

Где myPageName будет именем запрошенной страницы (если URL-адрес будет «http://www.mysite.com/contact.html», тогда myPageName будет «contact». Если это будет «http://www.mysite .com/info.html», тогда myPageName будет «info»).

Как я могу это сделать?


person nbarraille    schedule 22.02.2011    source источник
comment
@tsegay: я отредактировал свой первоначальный пост, добавив больше информации. Спасибо.   -  person nbarraille    schedule 23.02.2011
comment
Вы нашли решение для этого?   -  person blank    schedule 08.04.2012


Ответы (1)


Ознакомьтесь с примером динамических плиток на сайте springbyexample.org. страница. DynamicTilesView делает именно то, что вы хотите (см. пример конфигурации здесь). Полный пример динамических плиток можно найти здесь на гитхабе

person James    schedule 31.08.2012