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 :

Action par défaut


Sujet :

Struts 1 Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Par défaut Action par défaut
    Bonjour, je cherche un moyen de déclencher une action au moyen du controleur quand l'utilisateur entre une chaîne de requête vide typiquement : http://localhost/monProjet/
    J'ai trouvé ça : http://java.developpez.com/faq/strut...sdefaultaction
    dans la faq struts mais cette solution n'est pas acceptable dans la mesure ou elle rompt le contrat imposé par MVC à savoir que le controleur centralise l'arrivé des requêtes. Je le fais aisément en php avec le Zend framework, j'imagine du moins j'espère que cela est faisable sous struts puisqu'il est estampillé MVC.
    Cordialement.

  2. #2
    Membre averti
    Inscrit en
    Janvier 2007
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 50
    Par défaut
    lol quand tu entres une chaine vide c'est la page index.jsp / index.php / index.htm / index.html qui s'exécute.

    Si tu veux rediriger dans une action avec Struts tu peux faire un <logic:forward> dans index.jsp par exemple. Dans ce cas le nom de ton forward devra être déclaré en tant que global-forward dans ton struts-config

  3. #3
    Membre Expert Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Par défaut
    Citation Envoyé par Tino13 Voir le message
    lol quand tu entres une chaine vide c'est la page index.jsp / index.php / index.htm / index.html qui s'exécute.
    ai je dis quelque chose de marrant?

    Citation Envoyé par Tino13 Voir le message
    Si tu veux rediriger dans une action avec Struts tu peux faire un <logic:forward> dans index.jsp par exemple. Dans ce cas le nom de ton forward devra être déclaré en tant que global-forward dans ton struts-config
    Si je suis ton raisonnement, index.jsp devient le controleur frontal puisque c'est lui qui reçoit la requête en premier, c'est bien ça? et c'est bien lui et lui seul qui recevra toutes les requêtes en premier?

  4. #4
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Non, index.jsp ne devient pas un contrôleur frontal, c'est juste la page appelée par défaut pour le niveau demandé.
    Si tu tappes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    http://serveur:port/nomAppli/ -> tu iras sur la page index.xxx à la racine de l'application
     
    http://serveur:port/nomAppli/unRepertoire1/unAutre/ -> tu iras sur la page index.xxx de /unRepertoire1/unAutre/ 
     
    http://serveur:port/nomAppli/unRepertoire1/unAutre/unePage.jsp -> tu appelles la page demandée
    C'est plus clair ?

    A+
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre Expert Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Par défaut
    Si ça n'est pas le controleur frontal, il y a un problème avec le modèle MVC puisque dans ce cas; il ne centralise pas toutes les requêtes : si je ne précise pas d'action, c'est index.jsp qui intercepte la requête, si je précise une action (quelquechose.do) c'est le controleur (qui étant actionServlet si je ne dis pas de bêtise) qui intercepte la requête. Moi je veux faire comme dans les autres langages WEB où quoi que tu tapes, c'est le controleur qui intercepte en premier la requête.

  6. #6
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Tu mélanges...
    Il n'y a aucun problème dans le modèle MVC2 de Struts.
    Une application Web, ce n'est pas seulement Struts, il peut y avoir d'autres frameworks impliqués.
    Le contrôleur central de struts (org.apache.struts.action.ActionServlet) s'occupe des appels à struts, et rien d'autre

    Un contrôleur (étendant Action ou DispatchAction ou LookupDispatchAction) n'est appelé que via l'appel /xxxxx.do (une référence à un mapping <action ...> dans struts-config.xml)
    Lorsque tu appelles une page html ou jsp ou une image etc... il ne passe pas par le contrôleur.

    Si tu cherches à centraliser quelque part tous les accès aux ressources de ton application, il faut passer par un filtre.
    Ci-dessous un exemple :
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
    public class FilterUTF8 implements Filter
    {
        public void init(FilterConfig filterConfig) throws ServletException {}
        public void destroy() {}
     
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException
        {
            try
            {
                request.setCharacterEncoding("UTF-8");
                chain.doFilter(request, response);
            }
            catch (Throwable t)
            {
                ...
            }
        }
    }
     
    Et le Web.xml
     
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.5" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
        <filter>
          <filter-name>FiltreUTF8</filter-name>
          <filter-class>le.package.du.filtre.FilterUTF8</filter-class>
        </filter>
     
        <filter-mapping>
          <filter-name>FiltreUTF8</filter-name>
          <url-pattern>/*</url-pattern>
        </filter-mapping>
     
        <servlet>
          <servlet-name>action</servlet-name>
          <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
    ... etc ...
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre Expert Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Par défaut
    Bonjour, j'ai finalement trouvé une solution portable et propre :
    j'ai commencé par redéfinir le controleur
    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
    package com.sitbon;
    import java.io.IOException;
    import javax.servlet.ServletException;
    import javax.servlet.http.*;
    import org.apache.struts.action.*;
     
    public class controleur extends ActionServlet{
        protected void process( HttpServletRequest request, 
                                HttpServletResponse response) 
                                throws IOException, ServletException {
          String path = request.getRequestURI().toString();
          if(path.equals("/")){          
              request.getRequestDispatcher("/WEB-INF/welcomeStruts.jsp")
                     .forward(request, response);                  
          }
          else{
              super.process(request, response);
          }
       }    
    }
    Dans le fichier web.xml j'ai fais
    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
    <servlet>
        <servlet-name>controleur</servlet-name>
        <servlet-class>com.sitbon.controleur</servlet-class>
    </servlet>
     
    <welcome-file-list>
        <welcome-file>controleur</welcome-file>
    </welcome-file-list>
     
    <servlet-mapping>
        <servlet-name>controleur</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>
     
    <servlet-mapping>
        <servlet-name>controleur</servlet-name>
        <url-pattern>/controleur</url-pattern>
    </servlet-mapping>
    Bien entendu, je n'ai pas mis l'intégralité du fichier web.xml.
    Cordialement ,désolé pour le dérangement et merci à ceux qui m'ont répondu.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [SP-2010] Supprimer les Actions par défaut sur une liste externe
    Par mrkinfo dans le forum SharePoint
    Réponses: 2
    Dernier message: 21/03/2013, 15h36
  2. [ZF 1.9] Action par défaut : __call et les controllers
    Par s.n.a.f.u dans le forum MVC
    Réponses: 4
    Dernier message: 02/10/2009, 16h39
  3. Action par défaut d'un menu contextuel (ContextMenuStrip)
    Par DranDane dans le forum Windows Forms
    Réponses: 2
    Dernier message: 06/08/2008, 16h28
  4. Réponses: 2
    Dernier message: 22/04/2008, 08h59
  5. [intput] action par défaut lorsqu'on appuit sur "Enter&
    Par pmartin8 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 25/10/2005, 18h45

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