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 :

Pb multibox : EXCEPTION "javax.servlet.ServletException: BeanUtils.populate"


Sujet :

Struts 1 Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Inactif
    Inscrit en
    Mars 2005
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 42
    Par défaut Pb multibox : EXCEPTION "javax.servlet.ServletException: BeanUtils.populate"
    Bonjour,

    j'essaie de récupérer la liste d'objet retourné par ma multibox:
    Mais ca me sort l exeption suivante :


    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
    description Le serveur a rencontré une erreur interne () qui l'a empêché de satisfaire la requête.
     
    exception
     
    javax.servlet.ServletException: BeanUtils.populate
    	org.apache.struts.util.RequestUtils.populate(RequestUtils.java:1254)
    	org.apache.struts.action.RequestProcessor.processPopulate(RequestProcessor.java:821)
    	org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:254)
    	org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
    	org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
     
    cause mère
     
    java.lang.IllegalArgumentException: argument type mismatch
    	sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    	sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    	java.lang.reflect.Method.invoke(Unknown Source)
    	org.apache.commons.beanutils.PropertyUtils.setSimpleProperty(PropertyUtils.java:1789)
    	org.apache.commons.beanutils.PropertyUtils.setNestedProperty(PropertyUtils.java:1684)
    	org.apache.commons.beanutils.PropertyUtils.setProperty(PropertyUtils.java:1713)
    	org.apache.commons.beanutils.BeanUtils.setProperty(BeanUtils.java:1019)
    	org.apache.commons.beanutils.BeanUtils.populate(BeanUtils.java:808)
    	org.apache.struts.util.RequestUtils.populate(RequestUtils.java:1252)
    	org.apache.struts.action.RequestProcessor.processPopulate(RequestProcessor.java:821)
    	org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:254)
    	org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
    	org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)

    Ma jsp est :

    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
    41
    42
    43
     
    <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>
    <%@ taglib uri="/WEB-INF/struts-template.tld" prefix="template" %>
    <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
    <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
    <%@ page import="appHIB.Roles" %>
    <html:html>
    <head>
    <title>Page de saisie d'un user</title>
    </head>
    <body bgcolor="#ffffff">
     
    <!--
     Ici c'est la page ou sera saisis le nom de notre user, ensuite le formulaire sera donnée a userSaisirBean(réalisé par le controleur) qui
     controlera celui-ci avant de le donner a l'action pour le traitement métier et l'acces aux bases de données.
    -->
     
    <html:form  action="/create" name="frmAjouterUser" type="app.UserAjouterBean">
    <CENTER>
    <h2>Saisir les informations de votre User</h2>
    <table >
    <br/>
    <TR><TD><h5>Login      :</h5></TD><TD><html:text property="logUser" size="50"/><html:errors property="logUser"/></TD></TR>
    <TR><TD><h5>Nom        :</h5></TD><TD><html:text property="nameUser" size="50"/><html:errors property="nameUser"/></TD></TR>
    <TR><TD><h5>Email      :</h5></TD><TD><html:text property="emailUser" size="50"/><html:errors property="emailUser"/></TD></TR>
    <TR><TD><h5>Liste Roles:</h5></TD><TD>
    						<logic:iterate name="UserAjouterBean" property="listderoles" id="id" >
    							<html:multibox property="listroles" >
    									<bean:write name="id"  />
    							</html:multibox>
    									<bean:write name="id" property="name"/><br/>
    						</logic:iterate></TD></TR>
     
    </table>
     
     
     
    <html:submit value="Valider"/>
    <html:reset value="Reset"/>
    </CENTER>
    </html:form>
    </body>
    </html:html>

    Ma bean est :
    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    package app;
    import java.util.Collection;
     
    import org.apache.struts.action.ActionForm;
     import org.apache.struts.action.ActionErrors;
     import org.apache.struts.action.ActionError;
     import org.apache.struts.action.ActionMapping;
     
    import appHIB.Roles;
     
    import javax.servlet.http.*;
     
     /** ici on definit le bean qui va recevoir les donnees saisies
      * dans le formulaire frmSaisiruser de la page saisieuser.jsp
      */
     
     @SuppressWarnings("serial")
    public class UserAjouterBean
         extends ActionForm {
       /**
        * Parametre du bean
        */
       private String logUser = null;
       public String getLogUser() {
       return logUser;
       }
     
       public void setLogUser(String logUser) {
         this.logUser = logUser;
       }
       /***       name   ******************/
       private String nameUser = null;
       public String getNameUser() {
         return nameUser;
       }
     
       public void setNameUser(String nameUser) {
         this.nameUser = nameUser;
       }
     
       /***       email   ******************/
       private String EmailUser = null;
       public String getEmailUser() {
         return EmailUser;
       }
     
       public void setEmailUser(String EmailUser) {
         this.EmailUser = EmailUser;
       }
     
       /***       Roles   ******************/
       private String RolesUser = null;
       public String getRolesUser() {
         return RolesUser;
       }
     
       public void setRolesUser(String RolesUser) {
         this.RolesUser = RolesUser;
       }
     
    /*******************        List Roles            **********************************/
     
     
    	   private Collection<Roles> listroles=null;
     
    	   public Collection<Roles> getListroles() {
    		   return listroles;
    		   }
     
    		   public void setListroles(Collection<Roles> list) {
    		     this.listroles = list;
    		   }
     
     
    	   private Collection<Roles> listderoles=null;
     
    		public Collection<Roles> getListderoles() {
    			   return listderoles;
    			   }
     
    		 public void setListderoles(Collection<Roles> list) {
    			     this.listderoles = list;
    			   }
     
    		 private Long id=null;
    		 public Long getId() {
    				// TODO Auto-generated method stub
    				return id;
    			}
    		 public void setId(Long long1) {
    				// TODO Auto-generated method stub
    				this.id=long1;
    			}
     
     
     
     
     
       /**
        * Partie de controle des donnees saisies
        * @param actionMapping
        * @param httpServletRequest
        * @return
        */
       public ActionErrors validate(ActionMapping actionMapping,
                                    HttpServletRequest httpServletRequest) {
     
         /**
          * Creation ici de la liste d'erreur
          */
         ActionErrors erreurs = new ActionErrors();
         /**Les choses serieuse commencent, je vais controler mon formuliare
          * Ici en l'occurrence mon nomuser ne doit pas être vide
          * Le controleur appelle cette methode apres aoir chargé les données(ici une seule)
          * mais peu importe le nombre
          */System.out.println("bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb");
         if (logUser.length() == 0) {
           /**
            * Si le champ nom de l'user est vide je retourne une erreur
            * avec erreur.add("clé,ActionError)
            */
           erreurs.add("logUser", new ActionError("Objet.nom.vide"));
         }
         /**
          * ici on retourne la liste des erreurs, si celle-ci est vide le controleur pourra executer
          * la methode execute de notre Action (userSaisirAction)
          */
         return erreurs;
       }
     
     
     
     
    }
    Ma class action :
    est :
    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
    41
    42
    package app;
     
    /***
     * Cette classe va faire appel soit aux classes métier, aux classes de données.
     * Elle retournera ensuite les données a la page
     */
     
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import org.apache.struts.action.Action;
    import org.apache.struts.action.ActionForm;
    import org.apache.struts.action.ActionForward;
    import org.apache.struts.action.ActionMapping;
    import service.Service;
    import appHIB.User;
     
    public class UserAjouterAction extends Action {
     
     
      @SuppressWarnings("unchecked")
    public ActionForward perform(ActionMapping actionMapping, ActionForm actionForm, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) {
     
    System.out.println("Action2");
        String cible=new String("succes");
        UserAjouterBean Formulaire = (UserAjouterBean) actionForm;
        //ici mon formulaire est correct, je vais pouvoir interroger les données
        User user;
        Service service= new Service();
     
     
        user =(User) service.ajouterActionU(Formulaire);
     
        if(user==null) {
           cible="pastrouve";
        }
        else{
         httpServletRequest.setAttribute("beanData",user);
        }
       return actionMapping.findForward(cible);
      }
     
    }
    Merci d'avance

  2. #2
    Membre expérimenté
    Homme Profil pro
    Développeur Java
    Inscrit en
    Août 2007
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Août 2007
    Messages : 197
    Par défaut
    tu ne précises pas la propriété de ton bean à injecter dans ta multibox (afin de spécifier la value de ta checkbox en html)
    donc dans tonc code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <logic:iterate name="UserAjouterBean" property="listderoles" id="id" >
    	<html:multibox property="listroles" >
    		<bean:write name="id"  />
    	</html:multibox>
    	<bean:write name="id" property="name"/><br/>
    </logic:iterate></TD></TR>
    à remplacer par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <logic:iterate name="UserAjouterBean" property="listderoles" id="id" >
    	<html:multibox property="listroles" >
    		<bean:write name="id" property="MyProperty" />
    	</html:multibox>
    	<bean:write name="id" property="name"/><br/>
    </logic:iterate></TD></TR>
    où "MyProperty" est à remplacer par la propriété de ton bean que tu souhaite voir. dans ton cas vu le code fournit il peut s'agir soit de : "logUser"
    soit de: "nameUser"
    soit de: "emailUser"
    soit de: "roleUser"

  3. #3
    Inactif
    Inscrit en
    Mars 2005
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 42
    Par défaut
    merci , j'ai fait ce que tu m'a dit de faire mais ca donne tjrs la mm exception

  4. #4
    Membre expérimenté
    Homme Profil pro
    Développeur Java
    Inscrit en
    Août 2007
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Août 2007
    Messages : 197
    Par défaut
    Désolé j'ai mal lu ton code. Je reprend ce que j'ai dit dans le message précédent. Il semble que tu t'y prend mal. Tu fait une iteration à partir d'une collection contenue dans ton bean "UserAjouterBean" tu itere donc sur une Collection. Ce qui est correct cependant tu doit avoir une collection de bean. Donc pour faire simple:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <logic:iterate name="MonFormBean" property="listderoles" id="id" >
    	<html:multibox property="listroles" >
    		<bean:write name="id"  property="nameUser"/>
    	</html:multibox>
    	<bean:write name="id" property="roleUser"/><br/>
    </logic:iterate>
    où listderoles est une Collection de bean de type UserAjouterBean
    par example:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Collection<UserAjouterBean> listderoles=new Collection<UserAjouterBean>();
    listderoles.add .....
    ...
    où MonFormBean qui est le FormBean de ton formulaire contiendra alors ta collection de UserAjouterBean ainsi que la propriété "listroles" afin de récupérer les cases cochées.

  5. #5
    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
    Il faut également que la propriété spécifiée dans l'attribut property du tag html:multibox soit de type String[] et définie dans l'ActionForm avec getter et setter.
    Elle doit également être initialisée dans la méthode reset de l'ActionForm comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public void reset(ActionMapping mapping, HttpServletRequest request)
    {
       this.tabRoles = new String[0] ;
    }

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 05/11/2011, 15h53
  2. Réponses: 1
    Dernier message: 17/02/2010, 22h10
  3. Exception javax.servlet.ServletException: PWC1397
    Par rodney_viper dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 29/01/2009, 18h26
  4. Réponses: 1
    Dernier message: 17/10/2007, 09h31
  5. Réponses: 7
    Dernier message: 19/07/2006, 14h43

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