Struts Tiles proyecto web eclipse 2 parte

0

Por admin | Para la categoría de struts | noticia del 30-10-2009

Tutorial de struts

Como se puede observar las dos imágenes siguen teniendo un aspecto similar al de la plantilla inicial. Lo único que cambia es la página jsp que esta asignada al div de cuerpo del esquelo de la pantilla.jsp, ese es el objetivo de los tiles proporcionar un esquema visual común a un conjunto de páginas.

Dentro del struts-config.xml tenemos una sección ya preestablecida, solamente hay que descomentarla

1
2
3
4
5
6
 <plug-in className="org.apache.struts.tiles.TilesPlugin">
      <set-property property="definitions-config" value="/WEB-INF/tiles-defs.xml" />
      <set-property property="definitions-debug" value="2"/>
      <set-property property="moduleAware" value="true" />
 
    </plug-in>

como se puede observar en esta sección se hace referencia al archivo xml ubicado en web-inf/tiles-defs.xml, se trata del fichero xml que tiene la decleración de las definiciones de las vistas.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
 <?xml version="1.0" encoding="UTF-8"?>
 
<!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="${YOUR_DEFINITION_HERE}">
    </definition>
 
    <definition name="plantillatiles" path="/tiles/plantilla.jsp">
        <put name="titulo"  value="plantilla struts" type="string"/>
        <put name="cabecera" value="cabecera.jsp" type="page"/>
        <put name="menu"   value="menu.jsp" type="page"/>
        <put name="cuerpo"   value="cuerpo.jsp" type="page"/>
        <put name="pie" value="pie.jsp" />        
    </definition>
    <definition name="plantillaobjetos" extends="plantillatiles">
        <put name="titulo" value="plantilla para objetos" type="string" />
        <put name="cuerpo" value="objetos.jsp" type="page" />
    </definition>
    <definition name="plantillapersonajes" extends="plantillatiles">
        <put name="titulo" value="plantilla para personajes" type="string" />
        <put name="cuerpo" value="personajes.jsp" type="page" />
    </definition>
</tiles-definitions>

La plantilla tiles plantilla.jsp era la página jsp que contiene el esqueleto de la plantilla, se corresponde con la definición del name=plantillatiles, este nombre es aprovechado por struts para hacer referencia a la plantilla desde el struts-config.xml.

Como arranca la plantilla en cuanto al proceso de ejecución. Partimos como siempre de la página de ejercicios en dicha página hay un enlace a un action que es recogido por struts-config.xml ese action lo vuelvo a poner

1
2
3
 <action 
         path="/plantillas"
         forward="plantillatiles"/>

Ese action era plantillas.do y donde se hace el reenvío al forward plantillatiles que es justamente el valor del atributo name de las definiciones de tiles-def.xml con el path “tiles/plantillas.jsp” el resto de las jsp de la definición estan ya dentro de la carpeta tiles al mismo nivel.

Un error típico que puede ocurrir, es declarar la página jsp plantillas.jsp y llamarla directamente en ese caso nos da múltiples errores, varios errores actionservlet y un error de contexto indicando que está vacío.

La definición del fichero tiles-def.xml es la que alimenta la plantilla.jsp, indicando en el name la cabecera , menú , cuerpo y pie la página jsp que le corresponde a cada cual mediante el atributo value. También hay un atributo opcional type que indica el tipo de valor, hemos utilizado dos pages y string, este ultimo para indicar el título de la página.

Como se puede apreciar en el ejemplo tanto desde la primera parte como la segunda existen tres vistas, la primera que esta en el anterior post y corresponde con la plantilla inicial y la vista de objetos y personajes.

Si queremos utilizar parte del layout de las plantillas pero haciendo un cambio para tener una vista nueva ejemplo objetos no tenemos más que hacer una herencia por eso en la definición del archivo tiles-def.xml nos viene un name=plantillaobjeto que hereda “extends” de plantillatiles, todo menos el cuerpo y el título.

Mediante el fichero xml tiles-def.xml hacemos herencia y además estamos sobreescribiendo como en POO una parte de la plantilla, en este caso el cuerpo.

En el struts-config.xml se incluye lo siguiente, el controlador proporcionado por el framework Tiles en lugar del controlador de Struts. Este controlador es una versión extendida del controlador de Struts.

Si lo quitamos o descomentamos nos sale un error de servlet-exception

1
2
3
<!-- ============================================= Controller Configuration -->
 
       <controller    processorClass="org.apache.struts.tiles.TilesRequestProcessor"/>

Imagen la vista de objetos

plantillaobjetos

Imagen de la vista de personajes

plantillapersonajes

Escribe un comentario