Лучшая альтернатива Apache Tiles

Я ищу фреймворк, который лучше и проще в использовании, чем Apache Tiles (который до сих пор я использовал пару раз).

С плитками кажется, что когда у меня есть 100 действий, мне нужно создать 100 файлов jsp и создать 100 определений в tiles.xml.

Есть ли лучшая структура для управления моими шаблонами? Я хочу создать, например, 2 шаблона:

а) меню и колонка для контента
б) меню, колонка для контента, правая колонка с баннером

В обоих шаблонах меню постоянное. В template b правый столбец является постоянным, поэтому отличается только столбец содержимого. В этом простом примере я не хочу определять каждый файл JSP, который расширяет template a (просто для предоставления тела). Это отстой имхо. Или, может быть, я хромой, и я могу определить шаблон ПО УМОЛЧАНИЮ в Apache Tiles, но я просто не использую его правильно. В любом случае, вся помощь приветствуется.


person Fixus    schedule 17.03.2012    source источник
comment
Я думаю, что в вашем случае sitemesh может быть лучшим подходом, поскольку вам нужно просто, всего два шаблона. Как только вы настроите его, вы можете забыть об этом.   -  person jddsantaella    schedule 18.03.2012


Ответы (5)


В целом, я бы рекомендовал SiteMesh над плиткой.

Вот как настроить Сетка сайта 3

Вы можете использовать плитки для шаблонов на странице, но используйте SiteMesh для шаблона всего сайта. Тем не менее...

Как сделать так, чтобы плитки меньше сосали:

  1. Используйте соглашение вместо конфигурации. Например, поместите свои определения в webapp/WEB-INF/tiles.xml, и вам не нужно указывать плиткам, где они находятся.

  2. Используйте подстановочные знаки:

<definition name="default" template="/WEB-INF/templates/default.jsp">
    <put-attribute name="titleKey" value=""/>
    <put-attribute name="body" value=""/>
</definition>

<definition name="*" extends="default">
    <put-attribute name="titleKey" value="{1}.title"/>
    <put-attribute name="body" value="/WEB-INF/views/{1}.jsp" />
</definition>

Если ваш контроллер возвращает имя представления index, оно будет соответствовать определению *, использовать JSP-файл /WEB-INF/views/index.jsp для тела и использовать свойство сообщения index.title.

Если ваш контроллер возвращает имя представления contact-us, оно будет соответствовать определению *, использовать JSP-файл /WEB-INF/views/contact-us.jsp для тела и использовать свойство сообщения contact-us.title.

В своем шаблоне добавьте:

<c:set var="titleKey"><tiles:getAsString name="titleKey" /></c:set>

и

<title><spring:message code="${titleKey}"/></title>

Добавьте bean-компонент ReloadableResourceBundleMessageSource в контекст приложения сервлета.

Создайте файл /src/main/resources/messages.properties с таким содержимым:

index.title = Welcome to Acme, Inc.
contact-us.title = Contact Us
person Neil McGuigan    schedule 24.06.2014
comment
+1. Очень полезно, но что, если у вас есть несколько шаблонов default.jsp? Плитки не знали бы, как различать их с помощью подстановочных знаков, верно? Как и в случае с ОП, у него есть два шаблона. (Я понимаю, что в его случае он может просто игнорировать, но это не всегда то, что вы хотите делать.) - person vphilipnyc; 22.04.2015

Другой подход — Sitemesh. Он был разработан для создания сетки представлений, где вы не можете изменить оригинал, поэтому это скорее структура преобразования/декорирования html, чем структура шаблонов, такая как Tiles.

По моему личному мнению, плитки — лучший подход к приложениям, и я бы попытался реализовать какой-нибудь преобразователь (на основе некоторых соглашений об именах), который сделает xml-файлы устаревшими, но вопрос был не в этом.

@See: это старое введение показывает, как SiteMesh работает.

person Ralph    schedule 17.03.2012
comment
хорошо, но я хотел бы иметь механизм шаблонов с таким распознавателем. Есть что-то подобное? - person Fixus; 17.03.2012
comment
Я не знаю, но я ожидаю, что способ, которым преобразователь разрешает представление, сильно зависит от приложения, и, с другой стороны, я ожидаю, что написать его несложно. - person Ralph; 18.03.2012
comment
Да, Tiles-3 имеет упомянутую вами разрешающую способность. Ознакомьтесь с руководством…( tech.finn.no/the-ultimate-view- плитки-3 ) - person mck; 21.09.2014

(аналогично этому)

Вам не нужно определение для каждого действия.

Эта стандартная конфигурация является зависанием от плитки-1 дней. Это действительно не нужно с плитками-2, когда были введены подстановочные знаки, и особенно с плитками-3 вместе с OptionsRenderer.

Вот руководство, которое поможет вам

  • интеграция весны с плиткой,
  • определения с подстановочными знаками,
  • реализация резервного шаблона с помощью OptionsRenderer и
  • состав определений.
person mck    schedule 28.05.2013

В итоге я использовал JSF + Facelets. Я объединил их с Spring MVC, и это работает как шарм.

person Fixus    schedule 23.03.2012
comment
Вы не можете комбинировать одну структуру MVC с другой. Это непонимание идей. JSF — это структура MVC, такая же, как Spring MVC. Скорее всего, вы написали Spring с помощью JSF MVC. Лучшее объяснение описано здесь: stackoverflow.com/questions/18744910/ - person Daniel Hajduk; 12.01.2016

Основываясь на опыте, я настоятельно рекомендовал Apache Wicket.

person archetype    schedule 05.11.2012
comment
Не могли бы вы уточнить, почему это так? - person joergl; 06.11.2012