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 2 Java Discussion :

Problèmes de chemins/accès aux ressources dans une JSP


Sujet :

Struts 2 Java

  1. #1
    Membre à l'essai
    Inscrit en
    Décembre 2003
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 32
    Points : 15
    Points
    15
    Par défaut Problèmes de chemins/accès aux ressources dans une JSP
    Bonjour,

    j'ai une application Struts2, mes pages jsp sont dans un repertoire /jsp/ présent dans la racine du projet tout comme mes fichiers css dans un repertoire /css/.

    Je n'arrive pas à gérer le fait que la plupart du temps les pages soient affichées à l'utilisateur via des actions mais pas seulement : cas d'une jsp liée directement à une autre. Dans le premier cas le 'flot' reste dans la racine et peut dans cette page faire appel à un fichier css situé dans le repertoire /css/.

    Dans le second cas le 'flot' se retrouve dans le repertoire /jsp/ et la page ne trouve donc pas les fichiers css car elle ne 'voit' pas le repertoire /css/ elle va chercher à /jsp/css/.

    Si je change alors le href du css de 'css/xxx.css' en '../css/xxx.css' c'est le premier cas qui ne fonctionne plus.

    extrait d'une des pages avec le lien vers le css :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    	<head>
    		<title><s:text name="app.titreVigieNature" /></title>
    		<meta http-equiv="content-type" content="text/html; charset="UTF-8" />
            <link rel="shortcut icon" href="images/02deco/favicon.ico"/>
            <link rel="icon" type="image/gif" href="images/02deco/favicon.gif" />
    	<link rel='StyleSheet' type='text/css' href="css/vigieNature.css"/>
    	<s:if test="%{#session.CURRENT_PROJECT != null}">
    	<link rel='StyleSheet' type='text/css' href="css/<s:property value="#session.CURRENT_PROJECT.cssLink" />" /></s:if>
     
    	</head>
    dans chaque page il y a ce head et puis aussi l'inclusion d'un menu navigation qui fait référence à des pages statiques de présentation qui ne sont donc pas liées à des actions struts2 mais aimeraient bénéficier du css

    voici un extrait du menu navigation :

    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
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <%@ page language="java" contentType="text/html; charset=UTF-8"%>
    <%@ taglib prefix="s" uri="/struts-tags" %>
     
    <div id="menuwrapper">
    	<ul id="p7menubar">
    		<li>
    			<a class="trigger" href="Accueil.action"><s:text name="app.menuAccueil"/></a>
    		</li>
    		<li>
    			<a class="trigger" ><s:text name="app.menuProtocole"/></a>
    			<ul>		
    				<li><a href="jsp/protocolePapillons.jsp"><s:text name="app.menuProtocolePap" /></a></li>
    				<li><a href="jsp/protocoleEscargots.jsp"><s:text name="app.menuProtocoleEsc" /></a></li>
    				<li><a href="jsp/protocoleBourdons.jsp"><s:text name="app.menuProtocoleBour" /></a></li>
    				<li><a href="jsp/protocoleColeos.jsp"><s:text name="app.menuProtocoleColeos" /></a></li>
    quand je suis sur ma page d'accueil dont l'affichage passe par une action, j'ai bien le css, si je clique sur protocole papillons, je n'ai plus de css et si je clique une fois encore sur protocole papillons alors je n'ai même plus de page car il cherche alors à l'adresse '/jsp/jsp/protocolePapillons.jsp'


    voici un extrait de mon fichier struts.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
            <action name="Accueil">
    			<result>/jsp/Accueil.jsp</result>
    		</action>
     
    		<action name="Loguer_Utilisateur" class="fr.mnhn.obj.struts2.actions.UserAction" method="login">
    			<result name="input">/jsp/Accueil.jsp</result>
    			<result name="success" type="redirectAction">Espace_Utilisateur</result>
    		</action>
     
    		<action name="Deloguer_Utilisateur" class="fr.mnhn.obj.struts2.actions.UserAction" method="logout">
    			<result name="success">/jsp/Logout.jsp</result>
    		</action>
     
    		<action name="Trouver_Utilisateur" class="fr.mnhn.obj.struts2.actions.UserAction" method="trouver">
    			<result name="input">/jsp/EspaceAdministrateur.jsp</result>
    			<result name="success" type="redirectAction">Editer_Utilisateur</result>
    		</action>
     
    		<action name="Editer_Utilisateur" class="fr.mnhn.obj.struts2.actions.UserAction" method="editer">
    			<result name="success">/jsp/EditerUtilisateur.jsp</result>
    		</action>
    doit-je vraiment mettre toutes mes jsp derrière des actions?

    Merci,

    Olivier

  2. #2
    Membre habitué Avatar de Altenide
    Homme Profil pro
    Formateur en technologies web
    Inscrit en
    Décembre 2008
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Formateur en technologies web
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2008
    Messages : 129
    Points : 182
    Points
    182
    Par défaut
    Je te conseillerais de ne jamais sortir de ta pile struts 2, tu peux faire, un peu comme en jsf, des navigation rules ( dans ton struts.xml ) pour accèder à toutes tes pages.

    pour mes css ou toutes ressources externes je les stocke [[edit][je stocke le chemin]] dans mon context applicatif
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <s:property value="#application.basePath"/>css/general.css
    etc..

    et pour éviter tout accès direct d'un internaute sur une .jsp je fais un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <s:if test="#request['struts.view_uri'] == null"><!-- stack lost --><c:redirect url="home.action"></c:redirect>
    mais je suis preneur de toute autre solution...

  3. #3
    Membre à l'essai
    Inscrit en
    Décembre 2003
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 32
    Points : 15
    Points
    15
    Par défaut
    Je ne comprends pas ce que veut dire, qu'est ce que 'la pile de Struts 2'?

    merci pour ta réponse, ce que j'ai fait finalement c'est lier chaque page à une action fictive avec une méthode vide. C'est pas génial mais ça marche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    		<action name="Protocole_Escargots" class="fr.mnhn.obj.struts2.actions.UserAction" method="methodeVide">
    			<result name="success">/jsp/ProtocoleEscargots.jsp</result>
    		</action>
    l'action ne fait rien mais la page jsp trouve le css.

    a+

    Olivier

  4. #4
    Membre habitué Avatar de Altenide
    Homme Profil pro
    Formateur en technologies web
    Inscrit en
    Décembre 2008
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Formateur en technologies web
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2008
    Messages : 129
    Points : 182
    Points
    182
    Par défaut
    Pour moi, la pile struts 2 est l'ensemble des objets instanciés (Dont les beans d'actions) accessibles depuis la vue. On y trouve les objets standards, comme l'application, le context, la session. Les objets contenus dans la pile sont accessibles via les taglib struts 2 ou les ognl. Si une instance n'est pas dans la pile elle n'est pas accessible depuis la vue :

    Une pile valide est créée a partir du moment ou on a une instance ActionSupport ou de la classe d'action courante (on est passé par une règle d'action du fichier struts.xml et on en est sorti avec succès) après être passé par un certain nombre d'intercepteur.

    visuellement ta pile c'est le stack value du s:debug

    Pour ton pb de navigation entre les pages pourquoi mettre une fausse classe d'action et une fausse methode dans ton struts, çà me choque un peu ... method="uneMethodeVide" ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <!-- navigations rules -->
    <action name ="gotox">
    <result>toto.jsp</result>
    </action>
    <!-- end  navigations rules -->
    suffit je pense ( et c'est plus propre ).

    comme en jsf

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <navigation-rule> 
        <from-view-id>/pages/inputname.jsp</from-view-id> 
        <navigation-case> 
          <from-outcome>sayHello</from-outcome> 
          <to-view-id>/pages/greeting.jsp</to-view-id> 
        </navigation-case> 
        <navigation-case> 
          <from-outcome>sayGoodbye</from-outcome> 
          <to-view-id>/pages/goodbye.jsp</to-view-id> 
        </navigation-case> 
      </navigation-rule>

Discussions similaires

  1. Problème d'accès aux ressources dans un JAR
    Par weabow dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 15/06/2013, 18h49
  2. Problèmes de accès aux ressources dans une JSP
    Par sepltura dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 18/06/2012, 09h49
  3. Accès aux entités dans une JSP
    Par ppcchh dans le forum Struts 2
    Réponses: 4
    Dernier message: 12/05/2010, 13h00
  4. Acces aux valeurs dans une classe
    Par Seth77 dans le forum C#
    Réponses: 1
    Dernier message: 12/05/2007, 16h00
  5. Réponses: 2
    Dernier message: 15/02/2006, 17h35

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