IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Struts 1 Java Discussion :

[Struts 1.3][Tiles] Problème de forward vers un Tiles


Sujet :

Struts 1 Java

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Juin 2009
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 4
    Points : 1
    Points
    1
    Par défaut [Struts 1.3][Tiles] Problème de forward vers un Tiles
    Bonjour,

    Je développe une application en J2EE en utilisant le framework struts 1.3 qui tout au début permet de se logger en tant que admin, utilisateur ou client. J'ai commencé à implémenter les tiles dans mon programme et ce afin d'optimiser les lignes de codes en réutilisant les jsp des header, footer et menu à chaque fois.

    Voici donc mes jsp:

    template.jsp

    header.jsp
    footer.jsp
    menu.jsp

    index.jsp

    login.jsp =>body 1
    adminWindow.jsp =>body 2

    Pour l'instant, j'arrive à avoir ma premère page niquel avec l'interface, le body login.jsp. Cependant, dès que j'essaie de me logger en tant que admin j'ai cette erreur :

    javax.servlet.ServletException: java.lang.IllegalArgumentException: Le chemin templateAdmin ne commence pas par le caractère "/"
    org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:286)
    org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
    org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:462)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    La page d'acceuil de mon application est index.jsp, elle appelle le body login.jsp
    Voici le code de index.jsp :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
    <%@ taglib uri="/tags/struts-html" prefix="html"%>
    <%@ taglib uri="/tags/struts-tiles" prefix="tiles"%>
    <%@ taglib uri="/tags/struts-logic" prefix="logic" %>
    <!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>Index</title>
    </head>
     
    <body>
     
    <tiles:insert definition="templateIndex" flush="true" />
     
    </body>
    </html>
    A présent voici le code de mon tiles-def.xml :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    <tiles-definitions>
     
     
     
    	<definition name="templateIndex" path="/layouts/template.jsp">
    		<put name="header" value="/common/header.jsp" />
    		<put name="menu" value="/common/menu.jsp" />
    		<put name="body" value="/pages/login.jsp" />
    		<put name="footer" value="/common/footer.jsp" />
    	</definition>
     
    	<!-- =======================================================  -->
     
     
    	<definition name="templateAdmin" extends="templateIndex">
    			<put name="body" value="/pages/adminWindow.jsp" />
    	</definition>
     
     
    </tiles-definitions>
    code du struts config.xml :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <action-mappings>
         ....
     
         <action path="/login" type="controller.LoginAction" name="userForm"  scope="request" validate="true">
    	<forward name="adminWindow" path="templateAdmin" />
    	<forward name="error" path="/pages/error.jsp" />
        </action>
     
         ....
     
    </action-mappings>

    Une partie du code de mon LoginAction.java

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
        ....
      if (type.equals("Admin")) {
    	System.out.println("call admin ");
    	return mapping.findForward("adminWindow");
     
        ....
    Je ne comprends pas l'erreur vu qu'il n'y a pas de caractère "/" dans mon templateAdmin.

    Pouvez-vous m'aider svp ?

    Merci !

  2. #2
    Expert éminent

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Points : 7 778
    Points
    7 778
    Par défaut
    Le message d'erreur est lié au fait qu'en Struts pur, dans l'attribut path de la balise forward, on est sensé spécifier le nom d'une ressource (page html, page jsp ou path d'une Action) avec un "/" devant.

    Or, dans le cas où on veut faire un forward vers un tiles, on ne doit pas mettre de "/" devant le nom du tiles.

    Donc, pour pouvoir utiliser les Tiles en Struts 1.3, il faut ajouter le paramètre chainConfig à l'ActionServlet de Struts dans le web.xml afin que Struts utilise le fichier de configuration chain-config.xml présent dans le jar struts-tiles.
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <servlet>
    	<servlet-name>action</servlet-name>
    	<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
    	<init-param>
    		<param-name>config</param-name>
    		<param-value>/WEB-INF/struts-config.xml</param-value>
    	</init-param>
    	<init-param>
    		<param-name>chainConfig</param-name>
    		<param-value>org/apache/struts/tiles/chain-config.xml</param-value>
    	</init-param>
    	<load-on-startup>1</load-on-startup>
    </servlet>
    Ceci devrait corriger ton problème de forward vers un tiles.

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Juin 2009
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    ça marche !

    Merciiiii

  4. #4
    Nouveau Candidat au Club
    Inscrit en
    Juin 2009
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Re bonjour !

    J'ai un autre problème à présent :

    Je prends en exemple une de mes pages jsp dans laquelle j'ai mis cette ligne de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <layout:tab key="Manage" width="50" page="/pages/adminWindow.jsp"></layout:tab>
    Ce lien me renvoie donc vers adminWindow.jsp en état brut et non avec les header et footer ce qui est normal...

    Comment faire pour que que ça renvoie plutot vers la définition dans tiles-defs.xml ?

    Merci d'avance !

  5. #5
    Expert éminent

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Points : 7 778
    Points
    7 778
    Par défaut
    Utilise l'attribut href à la place de l'attribut page et spécifie dans cet attribut le path de l'Action qui fait le forward vers le tiles templateAdmin.

  6. #6
    Nouveau Candidat au Club
    Inscrit en
    Juin 2009
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Je ne suis pas sure de comprendre... quand vous dites path de l'action, vous voulez dire ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    path="/AdminWindowAction.java"
    ?

    Dans les deux cas ça ne marche pas...

  7. #7
    Expert éminent

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Points : 7 778
    Points
    7 778
    Par défaut
    Si dans le struts-config.xml, tu as défini par exemple une action de path /adminWindow qui fait un forward vers templateAdmin :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <action path="/adminWindow" ...>
    	<forward name="success" path="templateAdmin" />
    </action>
    alors code le layout:tab comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <layout:tab key="Manage" width="50" href="adminWindow.do"></layout:tab>

Discussions similaires

  1. [Struts Menu][Tiles] Problème d'utilisation
    Par newmar dans le forum Struts 1
    Réponses: 4
    Dernier message: 12/05/2008, 12h22
  2. [Struts 1.3.8] problème de tiles-def.xml
    Par fk04 dans le forum Struts 1
    Réponses: 11
    Dernier message: 07/11/2007, 19h24
  3. global-forward vers une definition Tiles
    Par ArithmeticException dans le forum Struts 1
    Réponses: 1
    Dernier message: 17/09/2006, 23h03
  4. [Struts] soucis forward vers JSP
    Par joy5 dans le forum Struts 1
    Réponses: 8
    Dernier message: 15/03/2006, 16h39
  5. [STRUTS][TILES] Problème sur actions génériques
    Par xv-mnt dans le forum Struts 1
    Réponses: 1
    Dernier message: 02/08/2005, 11h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo