Указание уникального содержимого ‹head› в макете Apache-Tiles

Я новичок в Apache-Tiles. На самом деле, основная причина, по которой я его использую, заключается в том, что он является средством визуализации по умолчанию при создании приложения Spring Roo. Я знаю, что у него много поклонников, поэтому я решил попробовать.

Однако я очень смущен тем, как выполнить простую задачу. Я хочу добавить некоторые объявления в раздел <head> страницы из своего макета. Я знаю/понимаю, что могу создать отдельную страницу jsp для включения заголовка и одну для включения тела и указать их в моем файле views.xml(как указано в этой публикации SO), но это кажется очень неуклюжим и неуместным.

Например, в указанном представлении я хотел бы включить некоторые дополнительные библиотеки JS. Кроме того, мне нужно добавить JS-скрипт jQuery, который я хочу запустить на странице. По соглашению мне нравится держать мой <body> в чистоте от такого кода и помещать все JS в раздел <head>.

Однако необходимость создавать 2 файла для каждого представления (head.jsp и body.jsp) не кажется правильной. В конце концов, это означает, что мне нужно открыть 2 файла (голова и тело), ​​поскольку я пишу свой код JS jQuery, чтобы точно видеть, какие элементы из тела манипулируются и т. д.

Я знаю, что в Sitemesh я могу легко сделать это на той же странице. Я также знаю, что Sitemesh и Tiles не претендуют на одно и то же, но я ожидал, что будет более простой способ сделать это, чем два отдельных файла.

Нет ли способа определить разные регионы/включения из одного и того же представления jsp (как в Sitemesh)? Единственный выбор - иметь 2 разных файла - один для заголовка и один для тела? Я ничего не могу сделать, чтобы на странице index.jspx у меня были и определения, и определения?

Текущая настройка:

По умолчанию.jspx:

<html xmlns:jsp="http://java.sun.com/JSP/Page" xmlns:c="http://java.sun.com/jsp/jstl/core" xmlns:tiles="http://tiles.apache.org/tags-tiles" xmlns:spring="http://www.springframework.org/tags" xmlns:util="urn:jsptagdir:/WEB-INF/tags/util" >  

    <jsp:output doctype-root-element="HTML" doctype-system="about:legacy-compat" />

    <jsp:directive.page contentType="text/html;charset=UTF-8" />  
    <jsp:directive.page pageEncoding="UTF-8" /> 

    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
        <meta http-equiv="X-UA-Compatible" content="IE=8" />    

        <util:load-scripts />

        <spring:message code="application_name" var="app_name" htmlEscape="false"/>
        <title><spring:message code="welcome_h3" arguments="${app_name}" /></title>
    </head>

    <body class="tundra spring">
        <div id="wrapper">
            <tiles:insertAttribute name="header" ignore="true" />
            <tiles:insertAttribute name="menu" ignore="true" />   
            <div id="main">
                <tiles:insertAttribute name="body"/> 
                <tiles:insertAttribute name="footer" ignore="true"/>
            </div>
        </div>
    </body>
</html>

Представления.xml:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE tiles-definitions PUBLIC "-//Apache Software Foundation//DTD Tiles Configuration 2.1//EN" "http://tiles.apache.org/dtds/tiles-config_2_1.dtd">
<tiles-definitions>
    <definition extends="default" name="rates/index">
        <put-attribute name="body" value="/WEB-INF/views/rates/index.jspx" />
    </definition>
</tiles-definitions>

Индекс.jspx:

    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
<div xmlns:jsp="http://java.sun.com/JSP/Page" 
    xmlns:spring="http://www.springframework.org/tags" 
    xmlns:util="urn:jsptagdir:/WEB-INF/tags/util" 
    xmlns:jQWidgets="urn:jsptagdir:/WEB-INF/tags/jQWidgets" 
    version="2.0">
  <jsp:directive.page contentType="text/html;charset=UTF-8"/>
  <jsp:output omit-xml-declaration="yes"/>
  <spring:message code="label_rates_index" htmlEscape="false" var="title"/>
  <util:panel id="title" title="${title}">
    <spring:message code="application_name" htmlEscape="false" var="app_name"/>
    <h3>
      <spring:message arguments="${app_name}" code="welcome_titlepane"/>
    </h3>
  </util:panel>

</div>

person Eric B.    schedule 20.09.2013    source источник


Ответы (1)


С плитками вы работаете с составным шаблоном, а не с шаблоном декоратора, как в случае с Sitemesh.

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

Еще одна запись в блоге, посвященная более продвинутым возможностям плиток, находится на tech.finn. .нет

person mck    schedule 22.09.2013