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 :

bean write exception


Sujet :

Struts 1 Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    358
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 358
    Par défaut bean write exception
    Bonjour,
    je suis entrain de m'initier à struts.

    mon but est d'afficher dans une page, l'erreur du formulaire.

    je n'utilise pas la méthode validate dans l'actionform.

    mon fichier 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
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    <?xml version="1.0" encoding="UTF-8"?>  
      <!DOCTYPE struts-config PUBLIC   
          "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"   
         "http://jakarta.apache.org/struts/dtds/struts-config_1_2.dtd">  
    <struts-config>
    	<global-exceptions>
    	    <exception
    	        type="com.jmd.test.struts.exception.BusinessException"
    	        key="error.business"
                bundle="struts.application.message" />  
    	</global-exceptions>
      <form-beans type="org.apache.struts.action.ActionFormBean">
    		<form-bean name="loginForm" type="com.jmd.test.struts.data.LoginForm" />
           	<form-bean name="inscriptionForm" type="com.jmd.test.struts.data.InscriptionForm" />
     
      </form-beans>
     
      <action-mappings type="org.apache.struts.action.ActionMapping">
        <action path="/login" input="/index.jsp" scope="request"
    	  name="loginForm" validate="true" type="com.jmd.test.struts.controleur.LoginAction">
          <forward name="succes" path="/accueil.jsp" redirect="false" />
          <forward name="echec" path="/index.jsp" redirect="false" />
        </action>
     
     
        <action path="/inscription" input="/error.jsp" scope="request"
    	  name="inscriptionForm" validate="false" type="com.jmd.test.struts.controleur.InscriptionAction">
          <forward name="succes" path="/accueil2.jsp" redirect="false" />
        </action>
      </action-mappings>
    	<message-resources key="error.message" parameter="properties.error" />
    </struts-config>
    mon fichier de controle

    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
    39
    40
     
    public class InscriptionAction extends Action{
     
    	public ActionForward execute(ActionMapping mapping, 
                ActionForm form, 
                HttpServletRequest req, 
                HttpServletResponse res) throws Exception {
    		String idEvent = "echec";
    		if (controleFormulaire(req) == true)
    			idEvent = "succes";
     
     
    		return mapping.findForward(idEvent);
    	}
     
     
     
    	private boolean controleFormulaire (HttpServletRequest request) throws BusinessException{
    		String nom = request.getParameter("nom");
    		String prenom = request.getParameter("prenom");
    		String email = request.getParameter("email");
     
    		if (nom.equals("".trim()) && email.equals("".trim()) && prenom.equals("".trim())){
    			throw new BusinessException("error.formulaireVide");
    		}
    		if ("ekremyilmaz@free.fr".equals(email.trim())){
    			throw new BusinessException("error.mailExistant");
    		}
    		if ("yilmaz".equals(nom.trim())){
    			throw new BusinessException("error.nomExistant");
    		}
     
    		return true;
     
     
     
     
    	}
     
    }

    mon fichier data :

    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
     
    public class InscriptionForm extends ActionForm{
    	/**
             * 
             */
     
    	private String nom;
    	private String prenom;
    	private String email;
    	public String getEmail() {
    		return email;
    	}
    	public void setEmail(String email) {
    		this.email = email;
    	}
    	public String getNom() {
    		return nom;
    	}
    	public void setNom(String nom) {
    		this.nom = nom;
    	}
    	public String getPrenom() {
    		return prenom;
    	}
    	public void setPrenom(String prenom) {
    		this.prenom = prenom;
    	}
     
    	public void reset(ActionMapping mapping, HttpServletRequest request) {
    		this.email = null;
    		this.prenom = null;
    		this.nom = null;
    	}
    }
    maintenant lorsque j'envoi le formulaire,je suis bien redirigé vers error.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
    21
    22
    23
    24
     
    <%@ page language="java" %>
    <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
    <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
    <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>Error JSP</title>
    </head>
    <body>
    <div style="background-color:#990000;color:#FFFFFF">
     
     
    <logic:messagesPresent>
    <html:messages id="error" bundle="error.message">
    		      -&nbsp;<bean:message name="error"/><br/>
    </html:messages>
     
    </logic:messagesPresent>
    </div>
    </body>
    </html>
    mais là, il m'affiche que le bean error n'existe pas. je vous dirai c normal, mais ce que je souhaite, c'est afficher les messages d'erreurs detectés.
    Or quand je remplace ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <bean:message name="error"/>
    par ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <bean:write name="org.apache.struts.action.EXCEPTION"/>
    j'obtiens dans la page error.jsp
    com.jmd.test.struts.exception.BusinessException: error.formulaireVide
    ce qui est normal vu que j'ai rien saisi dans mon formulaire.

    mais ce que je souhaite c'est qu'il m'affiche "le formulaire est vide" car dans mon fichier properties :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    error.formulaireVide=le formulaire est vide<br/>
    donc en fait ce que je ne comprend pas, c'est le bean write

  2. #2
    Membre émérite Avatar de zorm
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    584
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 584
    Par défaut
    Bonjour,

    Pourquoi ne pas utiliser la méthode validate?
    De plus dans ta classe Action, ta méthode controleFormulaire n'a pas de sens, utiliser le HttpServletRequest pour récupérer les attributs alors que tu as un actionForm... Si tu utilises Struts autant utiliser ses fonctionnalités...

    Il y a quelques techniques pour la gestion des erreurs avec struts décrites ici
    Je te conseille vraiment de regarder ce qui est fait, il s'agit de la meilleure façon de gérer les erreurs avec Struts

  3. #3
    Expert confirmé

    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
    Par défaut
    Franchement, pourquoi faire simple quand on peut faire compliqué.
    Blague à part, je suis tout à fait d'accord avec zorm.

    Sinon, pour que ta solution fonctionne, il faut récupérer le libellé du message error.formulaireVide comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    MessageResources messageResources=this.getResources(request,"error.message") ;
     
    if (nom.equals("".trim()) && email.equals("".trim()) && prenom.equals("".trim()))
    {
       throw new BusinessException(messageResources.getMessage("error.formulaireVide")) ;
    }
    mais avec le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <bean:write name="org.apache.struts.action.EXCEPTION"/>
    il t'affichera :
    com.jmd.test.struts.exception.BusinessException: le formulaire est vide
    Si tu veux qu'il t'affiche seulement "le formulaire est vide", il ne faut pas passer par une Exception, mais plutôt déclarer un message dans l'Action comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ActionMessages messages = new ActionMessages();
    messages.add("formulaireVide", new ActionMessage("error.formulaireVide"));
    this.saveMessages(request, messages);
    et l'afficher dans la page en codant ceci dans la jsp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <html:messages id="idMessage" message="true" bundle="error.message">
      <bean:write name="idMessage"/>
    </html:messages>
    comme indiqué dans la FAQ Struts.

    Mais il est clair que ce serait bien plus simple d'implémenter la méthode validate de l'ActionForm.

    Autre remarque : comme tu as un seul fichier des messages, je te conseille de supprimer l'attribut key de la balise message-resources afin que ce fichier soit accédé par défaut sans avoir à préciser d'attribut bundle.

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    358
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 358
    Par défaut
    oui je suis d'accord avec vous !!! j'ai commencé par implémenter avec validate pour comprendre le fonctionnement de struts mais là je suis arrivé sur un projet où il n'utilise pas validate, il utilise le mécanisme que je vous ai expliqué !!
    donc il faut s'adapter !!

    mais merci pour le code, j'avais pensé à ça dans le métro !!!!!!, je réfléchissais à comment le mettre en place.

    merci pour ton code !!!

    mais c'est vrai qu'ils ont compliqué pour rien alors qu'on peut faire plus simple !!!!!

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

Discussions similaires

  1. [Struts]bean:write toString?
    Par MasterMic dans le forum Struts 1
    Réponses: 2
    Dernier message: 16/09/2004, 11h40
  2. [Struts][JSP] Format avec bean:write
    Par cowa dans le forum Servlets/JSP
    Réponses: 20
    Dernier message: 19/05/2004, 18h16
  3. [STRUTS] [JAVA] Affichage conditionnel de bean:write
    Par babylone7 dans le forum Struts 1
    Réponses: 6
    Dernier message: 29/04/2004, 16h20
  4. [Struts]<bean:write>
    Par djoukit dans le forum Struts 1
    Réponses: 7
    Dernier message: 28/04/2004, 14h03
  5. [STRUTS] bean:write
    Par lfournial dans le forum Struts 1
    Réponses: 3
    Dernier message: 30/01/2004, 09h58

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