Шаблоны страниц tiles

Struts2 облегчает программистам жизнь при разработке WEB-интерфейса, предоставляя возможность создании страниц с использованием шаблонов на основе библиотеки и плагина tiles java. Шаблоны помогают создать единый стиль приложения, повторно использовать одни и те же компоненты, а также упростить внесение изменений в дизайн сайта.

Плагин struts2-tiles-plugin

В Stuts2 интеграция с tiles java реализована при помощи плагина struts2-tiles-plugin-*.jar. Для использования tiles необходимо дополнительно разместить следующие файлы в директории библиотек приложения WEB-INF/lib (звездочкой отмечены строки для версий библиотек) :

  • commons-digester-*.jar, commons-collections-*.jar, commons-beanutils-*.jar - Apache Commons;
  • tiles-api-*.jar, tiles-core-*.jar, tiles-jsp-*.jar - библиотеки tiles;
  • struts2-tiles-plugin-*.jar - плагин tiles для Struts2.

Кроме этого дополнительно необходимо в директории WEB-INF расположить библиотеку тегов struts-tiles.tld - Tag Library Descriptor (TLD). Библиотеку тегов можно разместить и в другом месте, но тогда необходимо будет ее прописать в дескрипторе приложения web.xml. Например :

Фрагмент кода файла web.xml

<taglib> 
    <taglib-uri>/struts-tiles</taglib-uri>
    <taglib-location>/WEB-INF/tags/struts-tiles.tld</taglib-location>
</taglib>

Для того, чтобы использовать tiles в WEB приложении необходимо содать шаблон страницы.

Шаблон страницы с использованием tiles

Шаблоны страниц — это JSP файлы, которые включают параметризированное содержание. Шаблоны реализованы с помощью набора тегов библиотеки struts-tiles.tld. Мы в нашем примере ограничимся только тегами insert, getAsString, put. Библиотека включает еще теги get, definition, putList, add, useAttribute, importAttribute, initComponentDefinitions, и желающие также могут их использвать в своих приложениях.

Схематично интерфейс страницы с использованием шаблона представлен на следующем рисунке.

Создадим шаблон страницы, который будет состоять из трех частей :

  • header - верхняя часть;
  • menu, body, sidebar - центральная часть;
  • footer - нижняя часть.

Таким образом, наш шаблон будет иметь заголовок header, центральную часть, разделенную на три сектора, и footer.

Листинг шаблона Template.jsp

<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %>
  
<html>
    <head>
        <title><tiles:getAsString name="title" ignore="true" /></title>
    </head>
	   
    <body>
    <table border="1" width="100%"> 
        <tr valign="top">
                <td colspan="5"><insert attribute="header" ignore="true" /></td>
        </tr>
        <tr valign="top">
            <td width="100"><tiles:insert attribute="menu"/></td> 
            <td>&nbsp;</td>
            <td><tiles:insert attribute="body"/></td> 
            <td>&nbsp;</td> 
            <td width="100"><tiles:insert attribute="sidebar"/></td>
        <tr>
            <td colspan=5 height=20%><tiles:insert attribute="footer" /></td>
        </tr> 
    </table> 
    </body> 
</html>

В файле Template.jsp мы определили структуру шаблона страниц WEB-приложения :

  • <%@ taglib uri="/WEB-INF/struts-tiles" prefix="tiles" %> - подключили библиотеку тегов Tiles;
  • <tiles:getAsString name="title" ignore="true" /> - для заголовка страницы будем использовать тег "title";
  • определили наименование всех секторов страницы - header, menu, body, sidebar, footer;
  • определили размеры секторов menu, sidebar;
  • сектора в центральной части разделили пробелами &nbsp;

С помощью тега tiles:insert содержимое JSP-страниц будет вставляться в соответсвующий сектор шаблона. Если атрибут ignore установлен в true (ignore="true"), то tiles игнорирует соответствующие параметр, если он отсутствует. Иначе tiles выдаст ошибку и страница не будет сформирована.

Наш шаблон Template.jsp представляет собой таблицу с именованными секторами (частями).

Страницы на основе шаблона

Для создания нашей домашней страницы Home.jsp на основе шаблона Template.jsp необходимо вставить в сектора шаблона соответствующие JSP-страницы. Следующий код будет использован, чтобы создать страницу.

Листинг домашней страницы Home.jsp

<%@ page contentType="text/html; charset=UTF-8" %>
<%@taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %>
  
<tiles:insert page="Template.jsp" flush="true">
    <tiles:put name="title" value="Домашняя страница" />
    <tiles:put name="header" value="header.jsp" /> 
    <tiles:put name="menu" value="menu.jsp" />
    <tiles:put name="body" value="body.jsp" />
    <tiles:put name="sidebar" value="sidebar.jsp" />
    <tiles:put name="footer" value="footer.jsp" />
</tiles:insert>

Страница Home.jsp создается на основе шаблона Template.jsp. Наименование атрибута тега put определяет сектор размещения страницы. В нашем случае заголовок страницы "title" определен как "Домашняя страница", в верхней части страницы (header) будет располагаться содержимое файла header.jsp и т.д.

Теперь нам необходимо определить общие страницы всех файлов (header.jsp, footer.jsp, menu.jsp, sidebar.jsp) нашего сайта и для каждой страницы создать body.jsp. При необходимости изменения внешнего интерфейса страницы, нужно будет только изменить содержимое одного из файлов.

Заголовок страницы header.jsp

Листинг header.jsp

<%@ page contentType="text/html; charset=UTF-8" %>
  
<table cellSpacing=0 cellPadding=0 width="100%" border="0">
    <tr>
        <td class=logo><img alt="logo" src="/images/logo.gif"></td> 
        <td class=body>&nbsp;</td>
    </tr>
</table>

Заголовок страницы представляет собой таблицу, разделенную на две части для размещения логотипа и содержания.

Меню страницы menu.jsp

Листинг menu.jsp

<%@ taglib uri="/struts-tags" prefix="s" %>
  
<a href="<s:url action='Main'/>">Main Page</a><br>
<a href="<s:url action='Books'/>">Books Shop</a>

На странице меню мы подключили библиотеку тегов для вызова action-классов. Меню включает только два пункта - переходы на главную страницу и в книжный магазин. Ссылки переходов определяют вызов действий и представлены тегами <s:url ... />

  Рейтинг@Mail.ru