Integración de Struts 2 y Tiles

En este capítulo, veamos los pasos involucrados en la integración del marco Tiles con Struts2. Apache Tiles es un marco de creación de plantillas creado para simplificar el desarrollo de interfaces de usuario de aplicaciones web.

En primer lugar, debemos descargar los archivos jar de mosaicos del sitio web de Apache Tiles . Debe agregar los siguientes archivos jar a la ruta de clases del proyecto.

  • tiles-api-x.y.z.jar
  • tiles-compat-x.y.z.jar
  • tiles-core-x.y.z.jar
  • tiles-jsp-x.y.z.jar
  • tiles-servlet-x.y.z.jar

Además de lo anterior, tenemos que copiar los siguientes archivos jar de la descarga de struts2 en su WEB-INF/lib.

  • commons-beanutils-x.y.zjar
  • commons-digester-x.y.jar
  • struts2-tiles-plugin-x.y.z.jar

Ahora configuremos el web.xmlpara la integración Struts-Tiles como se indica a continuación. Hay dos puntos importantes a tener en cuenta aquí. Primero, debemos decirle a los mosaicos dónde encontrar el archivo de configuración de mosaicostiles.xml. En nuestro caso, estará bajo/WEB-INFcarpeta. A continuación, debemos iniciar el oyente de Tiles que viene con la descarga de Struts2.

<?xml version = "1.0" Encoding = "UTF-8"?>
<web-app xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
   xmlns = "http://java.sun.com/xml/ns/javaee" 
   xmlns:web = "http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
   xsi:schemaLocation = "http://java.sun.com/xml/ns/javaee 
   http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
   id = "WebApp_ID" version = "2.5">
   <display-name>Struts2Example15</display-name>
	
   <context-param>
      <param-name>
         org.apache.tiles.impl.BasicTilesContainer.DEFINITIONS_CONFIG
      </param-name>
      
      <param-value>
         /WEB-INF/tiles.xml
      </param-value>
   </context-param>

   <listener>
      <listener-class>
         org.apache.struts2.tiles.StrutsTilesListener
      </listener-class>
   </listener>

   <filter>
      <filter-name>struts2</filter-name>
      <filter-class>
         org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
      </filter-class>
   </filter>

   <filter-mapping>
      <filter-name>struts2</filter-name>
      <url-pattern>/*</url-pattern>
   </filter-mapping>

   <welcome-file-list>
      <welcome-file>index.jsp</welcome-file>
   </welcome-file-list>
</web-app>

Siguiente vamos a crear tiles.xml en la carpeta / WEB-INF con el siguiente contenido:

<?xml version = "1.0" Encoding = "UTF-8" ?>

<!DOCTYPE tiles-definitions PUBLIC
   "-//Apache Software Foundation//DTD Tiles Configuration 2.0//EN"
   "http://tiles.apache.org/dtds/tiles-config_2_0.dtd">

<tiles-definitions>

   <definition name = "baseLayout" template="/baseLayout.jsp">
      <put-attribute name = "title"  value = "Template"/>
      <put-attribute name = "banner" value = "/banner.jsp"/>
      <put-attribute name = "menu"   value = "/menu.jsp"/>
      <put-attribute name = "body"   value = "/body.jsp"/>
      <put-attribute name = "footer"   value = "/footer.jsp"/>
   </definition>

   <definition name = "tiger" extends = "baseLayout">
      <put-attribute name = "title"  value = "Tiger"/>
      <put-attribute name = "body"   value = "/tiger.jsp"/>      
   </definition>

   <definition name = "lion" extends = "baseLayout">
      <put-attribute name = "title"  value = "Lion"/>
      <put-attribute name = "body"   value = "/lion.jsp"/>      
   </definition>
  
</tiles-definitions>

A continuación, definimos un diseño de esqueleto básico en el baseLayout.jsp. Tiene cinco áreas reutilizables / reemplazables. A sabertitle, banner, menu, body y footer. Proporcionamos los valores predeterminados para baseLayout y luego creamos dos personalizaciones que se extienden desde el diseño predeterminado. El diseño del tigre es similar al diseño básico, excepto que utiliza eltiger.jspcomo cuerpo y el texto "Tigre" como título. De manera similar, el diseño del león es similar al diseño básico, excepto que usa ellion.jsp como cuerpo y el texto "León" como título.

Echemos un vistazo a los archivos jsp individuales. A continuación se muestra el contenido debaseLayout.jsp archivo -

<%@ taglib uri = "http://tiles.apache.org/tags-tiles" prefix = "tiles"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">

<html>
   <head>
      <meta http-equiv="Content-Type" content="text/html; charset = UTF-8">
      <title>
         <tiles:insertAttribute name = "title" ignore="true" />
      </title>
   </head>

   <body>
      <tiles:insertAttribute name = "banner" /><br/>
      <hr/>
      <tiles:insertAttribute name = "menu" /><br/>
      <hr/>
      <tiles:insertAttribute name = "body" /><br/>
      <hr/>
      <tiles:insertAttribute name = "footer" /><br/>
   </body>
</html>

Aquí, simplemente armamos una página HTML básica que tiene los atributos de mosaicos. Insertamos los atributos de los mosaicos en los lugares donde los necesitamos. A continuación, creemos unbanner.jsp archivo con el siguiente contenido -

<img src="http://www.tutorialspoint.com/images/tp-logo.gif"/>

los menu.jsp El archivo tendrá las siguientes líneas que son los enlaces: a las acciones TigerMenu.action y LionMenu.action struts.

<%@taglib uri = "/struts-tags" prefix = "s"%>

<a href = "<s:url action = "tigerMenu"/>" Tiger</a><br>
<a href = "<s:url action = "lionMenu"/>" Lion</a><br>

los lion.jsp el archivo tendrá el siguiente contenido:

<img src="http://upload.wikimedia.org/wikipedia/commons/d/d2/Lion.jpg"/>
The lion

los tiger.jsp el archivo tendrá el siguiente contenido:

<img src="http://www.freewebs.com/tigerofdarts/tiger.jpg"/>
The tiger

A continuación, creemos el archivo de clase de acción. MenuAction.java que contiene lo siguiente:

package com.tutorialspoint.struts2;

import com.opensymphony.xwork2.ActionSupport;

public class MenuAction extends ActionSupport {
   public String tiger() { return "tiger"; }
   public String lion() { return "lion"; }
}

Esta es una clase bastante sencilla. Declaramos dos métodos tigre () y león () que devuelven tigre y león como resultados respectivamente. Pongamos todo junto en elstruts.xml archivo -

<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
   <package name = "default" extends = "struts-default">
      <result-types>
         <result-type name = "tiles" 
         class="org.apache.struts2.views.tiles.TilesResult" />
      </result-types>

      <action name = "*Menu" method = "{1}" 
         class = "com.tutorialspoint.struts2.MenuAction">
         <result name = "tiger" type = "tiles">tiger</result>
         <result name = "lion" type = "tiles">lion</result>
      </action>

   </package>
</struts>

Comprobemos lo que hicimos en el archivo anterior. En primer lugar, declaramos un nuevo tipo de resultado llamado "mosaicos", ya que ahora estamos usando mosaicos en lugar de jsp simple para la tecnología de visualización. Struts2 tiene su soporte para el tipo de resultado Tiles View, así que creamos el tipo de resultado "tiles" para que sea de la clase "org.apache.struts2.view.tiles.TilesResult".

A continuación, queremos decir que si la solicitud es para /tigerMenu.action lleva al usuario a la página de mosaicos de tigre y si la solicitud es para /lionMenu.action, lleva al usuario a la página de mosaicos de leones.

Logramos esto usando un poco de expresión regular. En nuestra definición de acción, decimos que cualquier cosa que coincida con el patrón "* Menú" será manejada por esta acción. El método de coincidencia se invocará en la clase MenuAction. Es decir, tigerMenu.action invocará a tiger () y lionMenu.action invocará a lion (). Luego, debemos asignar el resultado del resultado a las páginas de mosaicos correspondientes.

Ahora haga clic derecho en el nombre del proyecto y haga clic en Export > WAR Filepara crear un archivo War. Luego, implemente este WAR en el directorio de aplicaciones web de Tomcat. Finalmente, inicie el servidor Tomcat e intente acceder a la URLhttp://localhost:8080/HelloWorldStruts2/tigerMenu.jsp. Esto producirá la siguiente pantalla:

De manera similar, si va a la página de acción del menú del león, verá la página del león que usa el mismo diseño de mosaicos.