Intégration Struts 2 & Tiles

Dans ce chapitre, passons en revue les étapes de l'intégration du framework Tiles avec Struts2. Apache Tiles est un framework de création de modèles conçu pour simplifier le développement d'interfaces utilisateur d'applications Web.

Tout d'abord, nous devons télécharger les fichiers jar tiles à partir du site Web Apache Tiles . Vous devez ajouter les fichiers jar suivants au chemin de classe du projet.

  • 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

En plus de ce qui précède, nous devons copier les fichiers jar suivants à partir du téléchargement de struts2 dans votre WEB-INF/lib.

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

Maintenant, laissez-nous configurer le web.xmlpour l'intégration Struts-Tiles comme indiqué ci-dessous. Il y a deux points importants à noter ici. Tout d'abord, nous devons indiquer aux tuiles, où trouver le fichier de configuration des tuilestiles.xml. Dans notre cas, ce sera sous/WEB-INFdossier. Ensuite, nous devons lancer l'écouteur Tiles fourni avec le téléchargement 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>

Ensuite, créons tiles.xml sous le dossier / WEB-INF avec le contenu suivant -

<?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>

Ensuite, nous définissons une disposition de squelette de base dans le baseLayout.jsp. Il a cinq zones réutilisables / remplaçables. À savoirtitle, banner, menu, body et footer. Nous fournissons les valeurs par défaut pour baseLayout, puis nous créons deux personnalisations qui s'étendent à partir de la disposition par défaut. La disposition du tigre est similaire à la disposition de base, sauf qu'elle utilisetiger.jspcomme son corps et le texte "Tiger" comme titre. De même, la disposition du lion est similaire à la disposition de base, sauf qu'elle utilise lelion.jsp comme son corps et le texte "Lion" comme titre.

Jetons un coup d'œil aux fichiers jsp individuels. Voici le contenu debaseLayout.jsp fichier -

<%@ 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>

Ici, nous venons de créer une page HTML de base qui a les attributs de tuiles. Nous insérons les attributs de tuiles aux endroits où nous en avons besoin. Ensuite, créons unbanner.jsp fichier avec le contenu suivant -

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

le menu.jsp Le fichier aura les lignes suivantes qui sont les liens - vers les actions TigerMenu.action et 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>

le lion.jsp le fichier aura le contenu suivant -

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

le tiger.jsp le fichier aura le contenu suivant -

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

Ensuite, créons le fichier de classe d'action MenuAction.java qui contient ce qui suit -

package com.tutorialspoint.struts2;

import com.opensymphony.xwork2.ActionSupport;

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

C'est une classe assez simple. Nous avons déclaré deux méthodes tiger () et lion () qui renvoient respectivement le tigre et le lion. Mettons tout cela ensemble dans lestruts.xml fichier -

<!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>

Laissez-nous vérifier ce que nous avons fait dans le fichier ci-dessus. Tout d'abord, nous avons déclaré un nouveau type de résultat appelé "tiles" car nous utilisons maintenant des tiles au lieu de plain jsp pour la technologie d'affichage. Struts2 prend en charge le type de résultat Tiles View, nous créons donc le type de résultat "tiles" pour qu'il appartienne à la classe "org.apache.struts2.view.tiles.TilesResult".

Ensuite, nous voulons dire si la demande est pour /tigerMenu.action amenez l'utilisateur à la page des tuiles de tigre et si la demande est pour /lionMenu.action amène l'utilisateur à la page des tuiles de lion.

Nous y parvenons en utilisant un peu d'expression régulière. Dans notre définition d'action, nous disons que tout ce qui correspond au modèle "* Menu" sera traité par cette action. La méthode correspondante sera appelée dans la classe MenuAction. Autrement dit, tigerMenu.action invoquera tiger () et lionMenu.action invoquera lion (). Nous devons ensuite mapper le résultat du résultat sur les pages de tuiles appropriées.

Maintenant, faites un clic droit sur le nom du projet et cliquez sur Export > WAR Filepour créer un fichier War. Déployez ensuite ce WAR dans le répertoire webapps de Tomcat. Enfin, démarrez le serveur Tomcat et essayez d'accéder à l'URLhttp://localhost:8080/HelloWorldStruts2/tigerMenu.jsp. Cela produira l'écran suivant -

De même, si vous accédez à la page lionMenu.action, vous verrez la page lion qui utilise la même disposition de tuiles.