SlideShare una empresa de Scribd logo
1 de 37
Organizando la presentación con Tiles


                mayo de 2005
Introducción (I)
   Composición de páginas
       Directamente en los JSP
           Código repetido
           Imposible de mantener
           Consistencia costosa
       Método “<jsp:include/>”
       Utilizando plantillas
Introducción (II)
   Funcionamiento de <jsp:include/>


           Request
                      <jsp:include.../>

                           Request
       Página                              Página
       original            Response       incluida


           Response
Introducción (III)
   Utilizando plantillas

                            Layout.jsp



               Header.jsp     Título


                             El relleno
                Body.jsp


               Footer.jsp       (c)
Introducción (y IV)
   Ventajas e inconvenientes
       Para <jsp:include>
           Tecnología estable y probada
           Contenedores optimizados para JSP
           Pueden ser HTML no editable
       Para plantillas
           Mayor reutilización de código
           Mayor flexibilidad
           Más páginas a monitorizar
Instalación
      Forman parte de Struts (1.1+)
          Plug-In
          Pueden utilizarse sin Struts
      Declaración en “struts-config.xml”
<plug-in className="org.apache.struts.tiles.TilesPlugin" >
         <set-property property="definitions-config"
                  value="/WEB-INF/tiles-defs.xml,
                           /WEB-INF/tiles-tests-defs.xml" />
         <set-property property="definitions-parser-validate" value="true" />
</plug-in>
Creando la plantilla base (I)
   Primer paso:
       Identificar las diferentes plantillas
        necesarias
       Buscar reutilización (pero no forzarla)
   El layout se corresponde con las
    regiones de la página
       Cada región es un “tile”
       Los tiles pueden ser recursivos
Creando la plantilla base (II)

             HEADER




      MENU      BODY




             FOOTER
Creando la plantilla base (III)
<%@ taglib uri="/tags/tiles" prefix="tiles" %>
<HTML>
     <HEAD>
          <TITLE><tiles:getAsString name="title"/></TITLE>
                 <tiles:getAsString name="title"/>
     </HEAD>
     <BODY>
          <TABLE border="0" width="100%" cellspacing="5">
               <TR>
                     <TD colspan="2">
                               <tiles:insert attribute="header" />
                     </TD>
               </TR>
               <TR>
                     <TD width="140" valign="top">
                               <tiles:insert attribute='menu'/>
                     </TD>
                     <TD valign="top" align="left">
                               <tiles:insert attribute='body' />
                     </TD>
               </TR>
               <TR>
                     <TD colspan="2">
                               <tiles:insert attribute="footer" />
                     </TD>
               </TR>
          </TABLE>
     </BODY>
</HTML>
Creando la plantilla base (IV)
   Los tags básicos son
       “tiles:insert”
           El valor del atributo se supone una página
       “tiles:getAsString”
           El valor se supone o convierte a String
Creando la plantilla base (y V)
   Atributos opcionales
        <tiles:insert attribute="extra" ignore="true" />
        No se queja si no se encuentra.
Pero, ¿qué hace un tile?
   Tile: cada región o “cuadrado” de la
    página
       Puede utilizarse con XML
       No sólo para presentación
   Parametrizables
       Paso de argumentos como “atributos”
   “Definiciones”
       Un tile junto a sus atributos: instancia
Definiciones de “tiles” (I)
<%@ taglib uri="/tags/tiles" prefix="tiles" %>
<tiles:insert page="/layouts/myLayout.jsp" flush="true">
    <tiles:put name="title" value="Hello World" />
    <tiles:put name="header" value="/tiles/header.jsp" />
    <tiles:put name="body" type="string">
         <%-- Place the content from /tiles/pageTwo.jsp here --%>
    </tiles:put>
    <tiles:put name="footer" value="/tiles/footer.jsp" />
    <tiles:put name="menu" value="/tiles/menu.jsp" />
</tiles:insert>
Definiciones de “tiles” (II)
   Para cada “instancia” tenemos varios
    parámetros
   Sólo unos pocos cambian de página en
    página
   ¿Qué necesitamos?
       Un lugar donde dejar estas definiciones
       Poder reutilizarlas
       Definir sólo las diferencias
Definiciones de “tiles” (III)
   Declaración de una definición
       En base a tags
       Información necesaria
           Identificador
           Una plantilla base (path a la misma)
           Algunos atributos para insertar
Definiciones de “tiles” (y IV)
       Características avanzadas
         Una Definición puede sobrecargarse añadiendo
          más atributos o reemplazándolos cuando se utiliza.
         Podemos extender una definición utilizando como
          plantilla base otra definición (herencia de
          definiciones).
         Una definición puede ser reutilizada almacenándola
          en un JSP o en cargándola desde un archivo de
          definiciones en formato XML.
         Una definción puede utilizarse como “objetivo” de
          un ActionForward de Struts.
Fichero de definiciones (I)
   Configurado dentro del “plugin”
       Parámetro “definitions-config”
   Cada definición tiene un identificador
       No se corresponde con una URI
Fichero de definiciones (II)
<!DOCTYPE tiles-definitions PUBLIC
"-//Apache Software Foundation//DTD Tiles Configuration 1.1//EN"
"http://jakarta.apache.org/struts/dtds/tiles-config_1_1.dtd">

<tiles-definitions>

    <definition name="definitionName" page="/layouts/myLayout.jsp">
        <put name="title" value="Hello World" />
        <put name="header" value="/tiles/header.jsp" />
        <put name="footer" value="/tiles/footer.jsp" />
        <put name="menu" value="/tiles/menu.jsp" />
        <put name="body" value="/tiles/helloBody.jsp" />
    </definition>

    <!-- ... more definitions ... -->

</tiles-definitions>
Fichero de definiciones (III)
    Derivando definiciones
    <definition name="portal.page" extends="portal.masterPage">
        <put name="title" value="Tiles 1.1 Portal" />
        <put name="body" value="portal.body" />
    </definition>


    Nomenclatura recomendada
        Similar a los paquetes de Java
Declaración en JSP (I)
    Menos utilizada pero más flexible
<%@ taglib uri="/tags/tiles" prefix="tiles" %>
<tiles:definition id="definitionName" page="/layouts/myLayout.jsp">
    <tiles:put name="title" value="Hello World" />
    <tiles:put name="header" value="/tiles/header.jsp" />
    <tiles:put name="footer" value="/tiles/footer.jsp" />
    <tiles:put name="menu" value="/tiles/menu.jsp" />
    <tiles:put name="body" value="/tiles/helloBody.jsp" />
</tiles:definition>

    Ámbito de página (atributo “scope”)
Declaración en JSP (II)
    Reutilización
<%@ taglib uri="/tags/tiles" prefix="tiles" %>
<%@ include file="definitionsConfig.jsp" %>

<tiles:insert beanName="definitionName" beanScope="request" />
    <tiles:put name="title" value="Another Page" />
    <tiles:put name="body" value="/tiles/anotherBody.jsp" />
</tiles:insert>
Declaración en JSP (y III)
   Problema de “sobredefinición”
       Utilizar el tag “<logic:notPresent>”
<%@ taglib uri="/tags/struts-logic" prefix="logic" %>
<%@ taglib uri="/tags/tiles" prefix="tiles" %>

<logic:notPresent name="definitionName" scope="application">

    <tiles:definition id="definitionName" page="/layouts/myLayout.jsp">
        <tiles:put name="title" value="Hello World" />
        <tiles:put name="header" value="/tiles/header.jsp" />
        <tiles:put name="footer" value="/tiles/footer.jsp" />
        <tiles:put name="menu" value="/tiles/menu.jsp" />
        <tiles:put name="body" value="/tiles/helloBody.jsp" />
    </tiles:definition>
        <%-- … other definitions … --%>

</logic:notPresent>
Tiles como ActionForwards
   Plugin de Tiles
       Comprueba el path de los ActionForwards
       Si coincide con una definición de tile usa el
        tile
<action
    path="/tutorial/testAction2"
    type="org.apache.struts.example.tiles.tutorial.ForwardExampleAction">
    <forward
         name="failure"
         path=".forward.example.failure.page"/>
    <forward
         name="success"
         path=".forward.example.success.page"/>
</action>
Atributos de tiles (I)
   Hasta ahora
       Atributos estáticos
   ¿No podemos especificarlos en runtime?
       ¡Claro que sí!
       Contexto propio de tiles
           Diferente a los de servlets
           Ámbito de request
Atributos de tiles (II)
                       “put”
   Equivalente a “setAttribute”
   Diferentes formas de uso
         Como propiedad
     <tiles:put name="title" value="My first page" />
     <tiles:put name="title" value="<%=myObject%>" />

         Como cuerpo del tag
     <tiles:put name="title">My first page</tiles:put>


         Como bean
     <tiles:put name="title" beanName="myBean" beanScope="session"/>

         Como propiedad de un bean
     <tiles:put name="title" beanName="myBean" beanProperty="myProperty"/>
Atributos de tiles (III)
                       “put”
   Es posible indicar el tipo (type=):
       “page”, “string” o “definition”
   Y el rol de seguridad
       Si el usuario no dispone del rol no se añade el
        atributo
    <tiles:put name="title" value="myValue" role="myManager"/>
    <tiles:put name="title" value="myValue" role="myStaff"/>


       Si se especifica en una definición se comprueba
        el rol al inicializar el contexto de tiles.
Atributos de tiles (III)
                      “useAttribute”
   Permite acceder al valor del atributo desde
    otro contexto
         Se puede mapear directamente
        <tiles:useAttribute name="myAttribute" />

         O con otro nombre
        <tiles:useAttribute attributeName="anAttribute" name="myAttribute" />
Atributos de tiles (IV)
                “importAttribute”
   Funciona como “useAttribute”, pero
       No permite renombrarlos
       Si no se especifica atributo los importa todos
                  <tiles:importAttribute/>
       Podemos especificar el “scope”
Atributos de tiles (y V)
                 “putList” y “add”
   Podemos insertar los atributos como lista
       Tag “putList”
       Tag “add” para cada elemento de la lista
             <tiles:insert page="menu.jsp" >
                 <tiles:putList name="items">
                      <tiles:add value="home" />
                      <tiles:add value="documentation"/>
                 </tiles:putList>
             </tiles:insert>



   Luego podemos utilizar la “java.util.List” con
    un “importAttribute”
La guinda final...
    Podemos incluir hojas de estilo CSS en
     las plantillas base
    <%@ taglib uri="/tags/struts-html" prefix="html" %>
    <HTML>
        <HEAD>
             <TITLE><tiles:getAsString name="title"/></TITLE>
             <html:base/>
             <LINK rel="stylesheet" type="text/css"
             ref="<html:rewrite page='/styles/global.css'/>">
                                page='/styles/global.css'/>
        </HEAD>
        <BODY>
        ...
Manos a la obra...
Aplicando tiles (I)
    Pensamos el diseño
        Cabecera: logos, menu de idioma
        Cuerpo: contenido
        Pie de página: copyright
    Diagrama de plantillas
                                      .layout.order.form


                                      .layout.order.confirm

    .layout.main      .layout.order
Aplicando tiles (II)
   Activamos el plugin
    <plug-in className="org.apache.struts.tiles.TilesPlugin" >
               <set-property property="definitions-config"
                         value="/WEB-INF/conf/tiles-defs.xml/>
    </plug-in>
Aplicando tiles (III)
      Creamos la plantilla base
<html>
    <head>
        <title><tiles:getAsString name="pageTitle" ignore="true"/></title>
               <tiles:getAsString                  ignore="true"/>
        <link href="<h:rewrite page="/styles/jakin.css"/>" type="text/css" rel="stylesheet"/>
    </head>
    <body>
        <div id="Header">
            <tiles:insert attribute="header"/>
        </div>
        <div id="Content">
            <tiles:insert attribute="content"/>
        </div>
        <div id="Footer">
            <tiles:insert attribute="footer"/>
        </div>
        <iframe name="null" frameborder="0" width="0" height="0"></iframe>
    </body>
</html>
Aplicando tiles (IV)
     Creamos las definiciones
<tiles-definitions>

    <definition name=".layout.base" path="/WEB-INF/conf/layouts/MainLayout.jsp">
        <put name="header" value="/WEB-INF/pages/Header.jsp"/>
    </definition>

    <definition name=".layout.main" extends=".layout.base">
        <put name="header" value="/WEB-INF/pages/Header.jsp"/>
        <put name="pageTitle" value="título temporal"/>
    </definition>

    <definition name=".layout.order" extends=".layout.main">
        <put name="footer" value="/WEB-INF/pages/Footer.jsp"/>
        <put name="pageTitle" value="título de órdenes"/>
    </definition>

    <definition name=".layout.order.form" extends=".layout.order">
        <put name="content" value="/WEB-INF/pages/forms/order-form.jsp"/>
    </definition>

    <definition name=".layout.order.confirm" extends=".layout.order">
        <put name="content" value="/WEB-INF/pages/results/order-confirmation.jsp"/>
    </definition>

</tiles-definitions>
Aplicando tiles (V)
   Actualizamos “struts-config”
       Los forward apuntarán a tiles
    <action-mappings>
        <action path="/actions/locale"
                type="org.apache.struts.actions.LocaleAction"
                name="LocaleActionForm">
          <forward name="success"
                   path=".layout.order.form
                         .layout.order.form"/>
        </action>
        <action path="/actions/index"
                forward=".layout.order.form
                         .layout.order.form"/>
        <action path="/actions/order"
                type="app.Order"
                name="orderFormBean"
                scope="request"
                input=".layout.order.form
                       .layout.order.form">
          <forward name="success"
                   path=".layout.order.confirm
                         .layout.order.confirm"/>
        </action>
    </action-mappings>
Aplicando tiles (y VI)
   Añadimos un index.jsp...
                               ...y ¡listo!

Más contenido relacionado

Similar a 07 tiles (20)

05 jsp tags
05 jsp tags05 jsp tags
05 jsp tags
 
Tecnologia Web - HTML
Tecnologia Web - HTMLTecnologia Web - HTML
Tecnologia Web - HTML
 
Jsp directiva page
Jsp directiva pageJsp directiva page
Jsp directiva page
 
Drupal7 para desarrolladores
Drupal7 para desarrolladoresDrupal7 para desarrolladores
Drupal7 para desarrolladores
 
Tutorial3 Desymfony - La Vista. Twig
Tutorial3 Desymfony - La Vista. TwigTutorial3 Desymfony - La Vista. Twig
Tutorial3 Desymfony - La Vista. Twig
 
Practica 1
Practica 1Practica 1
Practica 1
 
Practica 1
Practica 1Practica 1
Practica 1
 
Acciones JSP
Acciones JSPAcciones JSP
Acciones JSP
 
Java web Lección 04 - JSTL
Java web Lección 04 - JSTLJava web Lección 04 - JSTL
Java web Lección 04 - JSTL
 
Java Web Lección 02 - JSP
Java Web Lección 02 - JSPJava Web Lección 02 - JSP
Java Web Lección 02 - JSP
 
Jquery para principianes
Jquery para principianesJquery para principianes
Jquery para principianes
 
J M E R L I N P H P
J M E R L I N P H PJ M E R L I N P H P
J M E R L I N P H P
 
Java Web - JSP
Java Web - JSPJava Web - JSP
Java Web - JSP
 
JavaServer Page
JavaServer PageJavaServer Page
JavaServer Page
 
Manual Basico De Struts
Manual Basico De StrutsManual Basico De Struts
Manual Basico De Struts
 
En 20 minutos ... jQuery
En 20 minutos ... jQueryEn 20 minutos ... jQuery
En 20 minutos ... jQuery
 
Practica utilizacion de beans en jsp
Practica  utilizacion de beans en jspPractica  utilizacion de beans en jsp
Practica utilizacion de beans en jsp
 
Parte II. Notas Rapidas (sticky notes) App W8: MVVM y SQLite.
Parte II. Notas Rapidas (sticky notes) App W8: MVVM y SQLite.Parte II. Notas Rapidas (sticky notes) App W8: MVVM y SQLite.
Parte II. Notas Rapidas (sticky notes) App W8: MVVM y SQLite.
 
Desarrollo de aplicaciones web usando Catalyst y jQuery
Desarrollo de aplicaciones web usando Catalyst y jQueryDesarrollo de aplicaciones web usando Catalyst y jQuery
Desarrollo de aplicaciones web usando Catalyst y jQuery
 
Producto 4
Producto 4Producto 4
Producto 4
 

Más de Roberto Moreno Doñoro (20)

21 bibsw tablasyotros
21 bibsw tablasyotros21 bibsw tablasyotros
21 bibsw tablasyotros
 
20 curvaselipticas
20 curvaselipticas20 curvaselipticas
20 curvaselipticas
 
19 protocoloscripto
19 protocoloscripto19 protocoloscripto
19 protocoloscripto
 
18 correoseguro
18 correoseguro18 correoseguro
18 correoseguro
 
17 certdigitalespkcs
17 certdigitalespkcs17 certdigitalespkcs
17 certdigitalespkcs
 
16 autenticafirma
16 autenticafirma16 autenticafirma
16 autenticafirma
 
15 funcioneshash
15 funcioneshash15 funcioneshash
15 funcioneshash
 
14 cifraasimetrica
14 cifraasimetrica14 cifraasimetrica
14 cifraasimetrica
 
13 ciframochilas
13 ciframochilas13 ciframochilas
13 ciframochilas
 
12 cifrasimetrica
12 cifrasimetrica12 cifrasimetrica
12 cifrasimetrica
 
11 cifraflujo
11 cifraflujo11 cifraflujo
11 cifraflujo
 
10 ciframoderna
10 ciframoderna10 ciframoderna
10 ciframoderna
 
09 cifraclasica
09 cifraclasica09 cifraclasica
09 cifraclasica
 
08 compalgoritmos
08 compalgoritmos08 compalgoritmos
08 compalgoritmos
 
07 teorianumeros
07 teorianumeros07 teorianumeros
07 teorianumeros
 
06 teoriainfo
06 teoriainfo06 teoriainfo
06 teoriainfo
 
05 gestionseg
05 gestionseg05 gestionseg
05 gestionseg
 
04 calidadinfo
04 calidadinfo04 calidadinfo
04 calidadinfo
 
02 breveintrocripto
02 breveintrocripto02 breveintrocripto
02 breveintrocripto
 
01 presentalibro
01 presentalibro01 presentalibro
01 presentalibro
 

Último

TRIPTICO-SISTEMA-MUSCULAR. PARA NIÑOS DE PRIMARIA
TRIPTICO-SISTEMA-MUSCULAR. PARA NIÑOS DE PRIMARIATRIPTICO-SISTEMA-MUSCULAR. PARA NIÑOS DE PRIMARIA
TRIPTICO-SISTEMA-MUSCULAR. PARA NIÑOS DE PRIMARIAAbelardoVelaAlbrecht1
 
Clasificaciones, modalidades y tendencias de investigación educativa.
Clasificaciones, modalidades y tendencias de investigación educativa.Clasificaciones, modalidades y tendencias de investigación educativa.
Clasificaciones, modalidades y tendencias de investigación educativa.José Luis Palma
 
periodico mural y sus partes y caracteristicas
periodico mural y sus partes y caracteristicasperiodico mural y sus partes y caracteristicas
periodico mural y sus partes y caracteristicas123yudy
 
OLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptx
OLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptxOLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptx
OLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptxjosetrinidadchavez
 
PLANIFICACION ANUAL 2024 - INICIAL UNIDOCENTE.docx
PLANIFICACION ANUAL 2024 - INICIAL UNIDOCENTE.docxPLANIFICACION ANUAL 2024 - INICIAL UNIDOCENTE.docx
PLANIFICACION ANUAL 2024 - INICIAL UNIDOCENTE.docxJUANSIMONPACHIN
 
Estrategia de Enseñanza y Aprendizaje.pdf
Estrategia de Enseñanza y Aprendizaje.pdfEstrategia de Enseñanza y Aprendizaje.pdf
Estrategia de Enseñanza y Aprendizaje.pdfromanmillans
 
programa dia de las madres 10 de mayo para evento
programa dia de las madres 10 de mayo  para eventoprograma dia de las madres 10 de mayo  para evento
programa dia de las madres 10 de mayo para eventoDiegoMtsS
 
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARONARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFAROJosé Luis Palma
 
Unidad II Doctrina de la Iglesia 1 parte
Unidad II Doctrina de la Iglesia 1 parteUnidad II Doctrina de la Iglesia 1 parte
Unidad II Doctrina de la Iglesia 1 parteJuan Hernandez
 
TEST DE RAVEN es un test conocido para la personalidad.pdf
TEST DE RAVEN es un test conocido para la personalidad.pdfTEST DE RAVEN es un test conocido para la personalidad.pdf
TEST DE RAVEN es un test conocido para la personalidad.pdfDannyTola1
 
Metabolismo 3: Anabolismo y Fotosíntesis 2024
Metabolismo 3: Anabolismo y Fotosíntesis 2024Metabolismo 3: Anabolismo y Fotosíntesis 2024
Metabolismo 3: Anabolismo y Fotosíntesis 2024IES Vicent Andres Estelles
 
LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...
LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...
LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...JAVIER SOLIS NOYOLA
 
Plan Año Escolar Año Escolar 2023-2024. MPPE
Plan Año Escolar Año Escolar 2023-2024. MPPEPlan Año Escolar Año Escolar 2023-2024. MPPE
Plan Año Escolar Año Escolar 2023-2024. MPPELaura Chacón
 

Último (20)

TRIPTICO-SISTEMA-MUSCULAR. PARA NIÑOS DE PRIMARIA
TRIPTICO-SISTEMA-MUSCULAR. PARA NIÑOS DE PRIMARIATRIPTICO-SISTEMA-MUSCULAR. PARA NIÑOS DE PRIMARIA
TRIPTICO-SISTEMA-MUSCULAR. PARA NIÑOS DE PRIMARIA
 
Clasificaciones, modalidades y tendencias de investigación educativa.
Clasificaciones, modalidades y tendencias de investigación educativa.Clasificaciones, modalidades y tendencias de investigación educativa.
Clasificaciones, modalidades y tendencias de investigación educativa.
 
Earth Day Everyday 2024 54th anniversary
Earth Day Everyday 2024 54th anniversaryEarth Day Everyday 2024 54th anniversary
Earth Day Everyday 2024 54th anniversary
 
Unidad 3 | Teorías de la Comunicación | MCDI
Unidad 3 | Teorías de la Comunicación | MCDIUnidad 3 | Teorías de la Comunicación | MCDI
Unidad 3 | Teorías de la Comunicación | MCDI
 
periodico mural y sus partes y caracteristicas
periodico mural y sus partes y caracteristicasperiodico mural y sus partes y caracteristicas
periodico mural y sus partes y caracteristicas
 
OLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptx
OLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptxOLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptx
OLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptx
 
Tema 7.- E-COMMERCE SISTEMAS DE INFORMACION.pdf
Tema 7.- E-COMMERCE SISTEMAS DE INFORMACION.pdfTema 7.- E-COMMERCE SISTEMAS DE INFORMACION.pdf
Tema 7.- E-COMMERCE SISTEMAS DE INFORMACION.pdf
 
PLANIFICACION ANUAL 2024 - INICIAL UNIDOCENTE.docx
PLANIFICACION ANUAL 2024 - INICIAL UNIDOCENTE.docxPLANIFICACION ANUAL 2024 - INICIAL UNIDOCENTE.docx
PLANIFICACION ANUAL 2024 - INICIAL UNIDOCENTE.docx
 
Repaso Pruebas CRECE PR 2024. Ciencia General
Repaso Pruebas CRECE PR 2024. Ciencia GeneralRepaso Pruebas CRECE PR 2024. Ciencia General
Repaso Pruebas CRECE PR 2024. Ciencia General
 
Estrategia de Enseñanza y Aprendizaje.pdf
Estrategia de Enseñanza y Aprendizaje.pdfEstrategia de Enseñanza y Aprendizaje.pdf
Estrategia de Enseñanza y Aprendizaje.pdf
 
programa dia de las madres 10 de mayo para evento
programa dia de las madres 10 de mayo  para eventoprograma dia de las madres 10 de mayo  para evento
programa dia de las madres 10 de mayo para evento
 
DIA INTERNACIONAL DAS FLORESTAS .
DIA INTERNACIONAL DAS FLORESTAS         .DIA INTERNACIONAL DAS FLORESTAS         .
DIA INTERNACIONAL DAS FLORESTAS .
 
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARONARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
 
Unidad II Doctrina de la Iglesia 1 parte
Unidad II Doctrina de la Iglesia 1 parteUnidad II Doctrina de la Iglesia 1 parte
Unidad II Doctrina de la Iglesia 1 parte
 
TEST DE RAVEN es un test conocido para la personalidad.pdf
TEST DE RAVEN es un test conocido para la personalidad.pdfTEST DE RAVEN es un test conocido para la personalidad.pdf
TEST DE RAVEN es un test conocido para la personalidad.pdf
 
PPTX: La luz brilla en la oscuridad.pptx
PPTX: La luz brilla en la oscuridad.pptxPPTX: La luz brilla en la oscuridad.pptx
PPTX: La luz brilla en la oscuridad.pptx
 
Metabolismo 3: Anabolismo y Fotosíntesis 2024
Metabolismo 3: Anabolismo y Fotosíntesis 2024Metabolismo 3: Anabolismo y Fotosíntesis 2024
Metabolismo 3: Anabolismo y Fotosíntesis 2024
 
LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...
LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...
LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...
 
Plan Año Escolar Año Escolar 2023-2024. MPPE
Plan Año Escolar Año Escolar 2023-2024. MPPEPlan Año Escolar Año Escolar 2023-2024. MPPE
Plan Año Escolar Año Escolar 2023-2024. MPPE
 
Sesión de clase: Defendamos la verdad.pdf
Sesión de clase: Defendamos la verdad.pdfSesión de clase: Defendamos la verdad.pdf
Sesión de clase: Defendamos la verdad.pdf
 

07 tiles

  • 1. Organizando la presentación con Tiles mayo de 2005
  • 2. Introducción (I)  Composición de páginas  Directamente en los JSP  Código repetido  Imposible de mantener  Consistencia costosa  Método “<jsp:include/>”  Utilizando plantillas
  • 3. Introducción (II)  Funcionamiento de <jsp:include/> Request <jsp:include.../> Request Página Página original Response incluida Response
  • 4. Introducción (III)  Utilizando plantillas Layout.jsp Header.jsp Título El relleno Body.jsp Footer.jsp (c)
  • 5. Introducción (y IV)  Ventajas e inconvenientes  Para <jsp:include>  Tecnología estable y probada  Contenedores optimizados para JSP  Pueden ser HTML no editable  Para plantillas  Mayor reutilización de código  Mayor flexibilidad  Más páginas a monitorizar
  • 6. Instalación  Forman parte de Struts (1.1+)  Plug-In  Pueden utilizarse sin Struts  Declaración en “struts-config.xml” <plug-in className="org.apache.struts.tiles.TilesPlugin" > <set-property property="definitions-config" value="/WEB-INF/tiles-defs.xml, /WEB-INF/tiles-tests-defs.xml" /> <set-property property="definitions-parser-validate" value="true" /> </plug-in>
  • 7. Creando la plantilla base (I)  Primer paso:  Identificar las diferentes plantillas necesarias  Buscar reutilización (pero no forzarla)  El layout se corresponde con las regiones de la página  Cada región es un “tile”  Los tiles pueden ser recursivos
  • 8. Creando la plantilla base (II) HEADER MENU BODY FOOTER
  • 9. Creando la plantilla base (III) <%@ taglib uri="/tags/tiles" prefix="tiles" %> <HTML> <HEAD> <TITLE><tiles:getAsString name="title"/></TITLE> <tiles:getAsString name="title"/> </HEAD> <BODY> <TABLE border="0" width="100%" cellspacing="5"> <TR> <TD colspan="2"> <tiles:insert attribute="header" /> </TD> </TR> <TR> <TD width="140" valign="top"> <tiles:insert attribute='menu'/> </TD> <TD valign="top" align="left"> <tiles:insert attribute='body' /> </TD> </TR> <TR> <TD colspan="2"> <tiles:insert attribute="footer" /> </TD> </TR> </TABLE> </BODY> </HTML>
  • 10. Creando la plantilla base (IV)  Los tags básicos son  “tiles:insert”  El valor del atributo se supone una página  “tiles:getAsString”  El valor se supone o convierte a String
  • 11. Creando la plantilla base (y V)  Atributos opcionales  <tiles:insert attribute="extra" ignore="true" />  No se queja si no se encuentra.
  • 12. Pero, ¿qué hace un tile?  Tile: cada región o “cuadrado” de la página  Puede utilizarse con XML  No sólo para presentación  Parametrizables  Paso de argumentos como “atributos”  “Definiciones”  Un tile junto a sus atributos: instancia
  • 13. Definiciones de “tiles” (I) <%@ taglib uri="/tags/tiles" prefix="tiles" %> <tiles:insert page="/layouts/myLayout.jsp" flush="true"> <tiles:put name="title" value="Hello World" /> <tiles:put name="header" value="/tiles/header.jsp" /> <tiles:put name="body" type="string"> <%-- Place the content from /tiles/pageTwo.jsp here --%> </tiles:put> <tiles:put name="footer" value="/tiles/footer.jsp" /> <tiles:put name="menu" value="/tiles/menu.jsp" /> </tiles:insert>
  • 14. Definiciones de “tiles” (II)  Para cada “instancia” tenemos varios parámetros  Sólo unos pocos cambian de página en página  ¿Qué necesitamos?  Un lugar donde dejar estas definiciones  Poder reutilizarlas  Definir sólo las diferencias
  • 15. Definiciones de “tiles” (III)  Declaración de una definición  En base a tags  Información necesaria  Identificador  Una plantilla base (path a la misma)  Algunos atributos para insertar
  • 16. Definiciones de “tiles” (y IV)  Características avanzadas  Una Definición puede sobrecargarse añadiendo más atributos o reemplazándolos cuando se utiliza.  Podemos extender una definición utilizando como plantilla base otra definición (herencia de definiciones).  Una definición puede ser reutilizada almacenándola en un JSP o en cargándola desde un archivo de definiciones en formato XML.  Una definción puede utilizarse como “objetivo” de un ActionForward de Struts.
  • 17. Fichero de definiciones (I)  Configurado dentro del “plugin”  Parámetro “definitions-config”  Cada definición tiene un identificador  No se corresponde con una URI
  • 18. Fichero de definiciones (II) <!DOCTYPE tiles-definitions PUBLIC "-//Apache Software Foundation//DTD Tiles Configuration 1.1//EN" "http://jakarta.apache.org/struts/dtds/tiles-config_1_1.dtd"> <tiles-definitions> <definition name="definitionName" page="/layouts/myLayout.jsp"> <put name="title" value="Hello World" /> <put name="header" value="/tiles/header.jsp" /> <put name="footer" value="/tiles/footer.jsp" /> <put name="menu" value="/tiles/menu.jsp" /> <put name="body" value="/tiles/helloBody.jsp" /> </definition> <!-- ... more definitions ... --> </tiles-definitions>
  • 19. Fichero de definiciones (III)  Derivando definiciones <definition name="portal.page" extends="portal.masterPage"> <put name="title" value="Tiles 1.1 Portal" /> <put name="body" value="portal.body" /> </definition>  Nomenclatura recomendada  Similar a los paquetes de Java
  • 20. Declaración en JSP (I)  Menos utilizada pero más flexible <%@ taglib uri="/tags/tiles" prefix="tiles" %> <tiles:definition id="definitionName" page="/layouts/myLayout.jsp"> <tiles:put name="title" value="Hello World" /> <tiles:put name="header" value="/tiles/header.jsp" /> <tiles:put name="footer" value="/tiles/footer.jsp" /> <tiles:put name="menu" value="/tiles/menu.jsp" /> <tiles:put name="body" value="/tiles/helloBody.jsp" /> </tiles:definition>  Ámbito de página (atributo “scope”)
  • 21. Declaración en JSP (II)  Reutilización <%@ taglib uri="/tags/tiles" prefix="tiles" %> <%@ include file="definitionsConfig.jsp" %> <tiles:insert beanName="definitionName" beanScope="request" /> <tiles:put name="title" value="Another Page" /> <tiles:put name="body" value="/tiles/anotherBody.jsp" /> </tiles:insert>
  • 22. Declaración en JSP (y III)  Problema de “sobredefinición”  Utilizar el tag “<logic:notPresent>” <%@ taglib uri="/tags/struts-logic" prefix="logic" %> <%@ taglib uri="/tags/tiles" prefix="tiles" %> <logic:notPresent name="definitionName" scope="application"> <tiles:definition id="definitionName" page="/layouts/myLayout.jsp"> <tiles:put name="title" value="Hello World" /> <tiles:put name="header" value="/tiles/header.jsp" /> <tiles:put name="footer" value="/tiles/footer.jsp" /> <tiles:put name="menu" value="/tiles/menu.jsp" /> <tiles:put name="body" value="/tiles/helloBody.jsp" /> </tiles:definition> <%-- … other definitions … --%> </logic:notPresent>
  • 23. Tiles como ActionForwards  Plugin de Tiles  Comprueba el path de los ActionForwards  Si coincide con una definición de tile usa el tile <action path="/tutorial/testAction2" type="org.apache.struts.example.tiles.tutorial.ForwardExampleAction"> <forward name="failure" path=".forward.example.failure.page"/> <forward name="success" path=".forward.example.success.page"/> </action>
  • 24. Atributos de tiles (I)  Hasta ahora  Atributos estáticos  ¿No podemos especificarlos en runtime?  ¡Claro que sí!  Contexto propio de tiles  Diferente a los de servlets  Ámbito de request
  • 25. Atributos de tiles (II) “put”  Equivalente a “setAttribute”  Diferentes formas de uso  Como propiedad <tiles:put name="title" value="My first page" /> <tiles:put name="title" value="<%=myObject%>" />  Como cuerpo del tag <tiles:put name="title">My first page</tiles:put>  Como bean <tiles:put name="title" beanName="myBean" beanScope="session"/>  Como propiedad de un bean <tiles:put name="title" beanName="myBean" beanProperty="myProperty"/>
  • 26. Atributos de tiles (III) “put”  Es posible indicar el tipo (type=):  “page”, “string” o “definition”  Y el rol de seguridad  Si el usuario no dispone del rol no se añade el atributo <tiles:put name="title" value="myValue" role="myManager"/> <tiles:put name="title" value="myValue" role="myStaff"/>  Si se especifica en una definición se comprueba el rol al inicializar el contexto de tiles.
  • 27. Atributos de tiles (III) “useAttribute”  Permite acceder al valor del atributo desde otro contexto  Se puede mapear directamente <tiles:useAttribute name="myAttribute" />  O con otro nombre <tiles:useAttribute attributeName="anAttribute" name="myAttribute" />
  • 28. Atributos de tiles (IV) “importAttribute”  Funciona como “useAttribute”, pero  No permite renombrarlos  Si no se especifica atributo los importa todos <tiles:importAttribute/>  Podemos especificar el “scope”
  • 29. Atributos de tiles (y V) “putList” y “add”  Podemos insertar los atributos como lista  Tag “putList”  Tag “add” para cada elemento de la lista <tiles:insert page="menu.jsp" > <tiles:putList name="items"> <tiles:add value="home" /> <tiles:add value="documentation"/> </tiles:putList> </tiles:insert>  Luego podemos utilizar la “java.util.List” con un “importAttribute”
  • 30. La guinda final...  Podemos incluir hojas de estilo CSS en las plantillas base <%@ taglib uri="/tags/struts-html" prefix="html" %> <HTML> <HEAD> <TITLE><tiles:getAsString name="title"/></TITLE> <html:base/> <LINK rel="stylesheet" type="text/css" ref="<html:rewrite page='/styles/global.css'/>"> page='/styles/global.css'/> </HEAD> <BODY> ...
  • 31. Manos a la obra...
  • 32. Aplicando tiles (I)  Pensamos el diseño  Cabecera: logos, menu de idioma  Cuerpo: contenido  Pie de página: copyright  Diagrama de plantillas .layout.order.form .layout.order.confirm .layout.main .layout.order
  • 33. Aplicando tiles (II)  Activamos el plugin <plug-in className="org.apache.struts.tiles.TilesPlugin" > <set-property property="definitions-config" value="/WEB-INF/conf/tiles-defs.xml/> </plug-in>
  • 34. Aplicando tiles (III)  Creamos la plantilla base <html> <head> <title><tiles:getAsString name="pageTitle" ignore="true"/></title> <tiles:getAsString ignore="true"/> <link href="<h:rewrite page="/styles/jakin.css"/>" type="text/css" rel="stylesheet"/> </head> <body> <div id="Header"> <tiles:insert attribute="header"/> </div> <div id="Content"> <tiles:insert attribute="content"/> </div> <div id="Footer"> <tiles:insert attribute="footer"/> </div> <iframe name="null" frameborder="0" width="0" height="0"></iframe> </body> </html>
  • 35. Aplicando tiles (IV)  Creamos las definiciones <tiles-definitions> <definition name=".layout.base" path="/WEB-INF/conf/layouts/MainLayout.jsp"> <put name="header" value="/WEB-INF/pages/Header.jsp"/> </definition> <definition name=".layout.main" extends=".layout.base"> <put name="header" value="/WEB-INF/pages/Header.jsp"/> <put name="pageTitle" value="título temporal"/> </definition> <definition name=".layout.order" extends=".layout.main"> <put name="footer" value="/WEB-INF/pages/Footer.jsp"/> <put name="pageTitle" value="título de órdenes"/> </definition> <definition name=".layout.order.form" extends=".layout.order"> <put name="content" value="/WEB-INF/pages/forms/order-form.jsp"/> </definition> <definition name=".layout.order.confirm" extends=".layout.order"> <put name="content" value="/WEB-INF/pages/results/order-confirmation.jsp"/> </definition> </tiles-definitions>
  • 36. Aplicando tiles (V)  Actualizamos “struts-config”  Los forward apuntarán a tiles <action-mappings> <action path="/actions/locale" type="org.apache.struts.actions.LocaleAction" name="LocaleActionForm"> <forward name="success" path=".layout.order.form .layout.order.form"/> </action> <action path="/actions/index" forward=".layout.order.form .layout.order.form"/> <action path="/actions/order" type="app.Order" name="orderFormBean" scope="request" input=".layout.order.form .layout.order.form"> <forward name="success" path=".layout.order.confirm .layout.order.confirm"/> </action> </action-mappings>
  • 37. Aplicando tiles (y VI)  Añadimos un index.jsp... ...y ¡listo!