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 :

Récupérer objets proprement dans la JSP


Sujet :

Struts 1 Java

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4
    Points : 1
    Points
    1
    Par défaut Récupérer objets proprement dans la JSP
    Bonjour à tous,

    je suis débutant struts et j'ai besoin d'un peu d'aide.
    Alors en gros, j'ai un formulaire, l'utilisateur va rentrer un id et l'action form correspondant va chercher en base de données tous les objets d'une table (par exemple tous les utilisateurs) qui ont un l'id du formulaire en parametre.
    Tous ces utilisateurs sont ensuite affichés dans la jsp.

    J'arrive à faire fonctionner ce bout de code mais pas de manière très propre...
    Par exemple, j'ai :

    ActionForm :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Criteria criteria = connection.createCriteria(Utilisateur.class);
    criteria.add(Restrictions.eq("id", (String)formulaire.get("id_formulaire")));
    List result = criteria.list();
    Iterator it = result.iterator();
    Utilistateur[] users= new Utilistateur[result.size()];
    for(int i=0; it.hasNext(); i++) {
    	users[i] = (Utilisateur) it.next();
    }
    request.setAttribute("users", users);
    request.setAttribute("usersSize", users.length);
    et ma 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
     
    <%
    	Integer usersSize= (Integer)request.getAttribute("usersSize");
    	Utilistateur[] users = new Utilistateur[usersSize.intValue()];
    	users = (Utilistateur[]) request.getAttribute("users");
    %>
    ...
    <% for(int i=0; i<params.length; i++) { %>
    <tr>
    	<td>
    		<%= users[i].getNom() %>
    	</td>
    </tr>
    <% } %>
    Donc en gros j'instancie Utilisateur 2 fois, une fois dans mon ActionForm pour stocker les résultats et les mettre en request. Et une deuxieme fois dans ma JSP pour pouvoir les récupérer et les afficher.

    C'est dans la JSP que c'est crade... surtout que je vais plus tard avoir plusieurs types d'objets à afficher dans une meme page.

    Si quelqu'un peut m'expliquer comment contourner cette méthode, ça m'aiderait

    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
    result étant une collection d'objets de type Utilisateur, tu peux la mettre directement dans le scope request via :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Criteria criteria = connection.createCriteria(Utilisateur.class);
    criteria.add(Restrictions.eq("id", (String)formulaire.get("id_formulaire")));
    List result = criteria.list();
    request.setAttribute("users", result);
    et pour afficher le nom de tous les utilisateurs dans la jsp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <%@ taglib uri="http://jakarta.apache.org/struts/tags-logic" prefix="logic" %>
    <%@ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean" %>
     
    <logic:iterate name="users" id="user">
    <tr>
       <td><bean:write name="user" property="nom"/></td>
    </tr>
    </logic:iterate>
    Attention, les directives taglib sont à adapter en fonction de la version de Struts et de J2EE que tu utilises.

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Merci pour la réponse, ça fonctionne parfaitement !

    J'essaye d'aller un peu plus loin maintenant en utilisant les bean, mais j'ai un petit soucis.
    Maintenant je veux afficher tous les utilisateurs avec leurs différentes informations dans un formulaire et pouvoir à la validation mettre à jour les champs dans la BDD s'il y a eu changement.
    Le soucis étant que je n'arrive pas à associer les bean:write et les html: xxx.

    Par exemple j'ai essayé de faire ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <html:password property="mdp">
    	<bean:write name="user" property="password" />
    </html:password>
    pour charger dans le input le password de l'utilisateur, mais ça ne fonctionne pas.

    Je ne vois pas aussi comment passer la valeur d'un champs du bean à un html:select :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <html:select property="domaine" value="" >
        <html:option value="LOCAL">LOCAL</html:option>
        <html:option value="FEDERATION CONTINENTALE">FEDERATION CONTINENTALE</html:option>
        <html:option value="DSI-GENERALI">DSI-GENERALI</html:option>
    </html:select>
    Je voudrais passer en value du select le champs "domaine" du bean user par exemple.

  4. #4
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Ok, c'est bon j'ai trouvé !

    Il suffit juste de mettre l'attribut name et property correpondant au bean dans les tags html: xxx et tout roule !

    Voilà ce que ça peut donner par 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
     
    <logic:iterate name="users" id="user">
    <html:form action="/updateUtilisateur">
    ...
    <html:hidden name="user" property="nom" />
    <bean:write name="user" property="nom" />
    <html:password name="user" property="password" />
    ...
    <html:select name="user" property="domaine" >
        <html:option value="LOCAL">LOCAL</html:option>
        <html:option value="FEDERATION CONTINENTALE">FEDERATION CONTINENTALE</html:option>
        <html:option value="DSI-GENERALI">DSI-GENERALI</html:option>
    </html:select>
    ...
    </html:form>
    </logic:iterate>

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    J'ai enlevé le tag résolu parce que j'ai à nouveau un soucis :

    Voilà le code qui me pose probleme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <html:select name="domaine" property="enti_codeId.codeId"  style="width: 300;">
    	<html:optionsCollection name="entites" label="nom" value="codeId" />
    </html:select>
    Comment récupérer coté métier la valeur sélectionnée dans le select ?
    Sachant qu'un domaine est reliée à une entité par un many-to-one sur le champs "enti_codeId".
    Ici, mon optionsCollection name="entites" correspond donc à la liste de toutes les entités, et mon select name="domaine" property="enti_codeId.codeId" sélectionne la bonne entité à sélectionner pour le domaine en cours au chargement de la page.

    Voilà mon form-bean du struts-config :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <form-bean 
    	name="form_test"       
      	type="org.apache.struts.validator.DynaValidatorForm" 
    	  >                    
      	...
      	<form-property name="enti_codeId.codeId" type="java.lang.Integer" initial="" />
    </form-bean>
    et coté métier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Integer entiteId = (Integer)formulaire.get("enti_codeId.codeId");
    J'obtiens cette erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    org.hibernate.ObjectNotFoundException: No row with the given identifier exists: [com.generali.hibernate.tables.Entites#0]

    Si quelqu'un a une idée...

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 44
    Points : 28
    Points
    28
    Par défaut
    Je suis confronté au même problème depuis un moment et je ne l'ai pas toujours pas résolu

Discussions similaires

  1. Réponses: 5
    Dernier message: 05/02/2009, 16h20
  2. Récupérer une valeur dans une jsp
    Par newmar dans le forum Struts 1
    Réponses: 2
    Dernier message: 09/05/2008, 23h26
  3. Affichage Blob (objet binaire) dans une jsp
    Par kokumbo dans le forum Struts 1
    Réponses: 2
    Dernier message: 19/02/2008, 16h59
  4. [POO] Récupérer objet java dans script javascript
    Par Mister Nono dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 11/10/2006, 16h42
  5. [struts][jsp] récupérer objet session dans ActionForm
    Par mlequim dans le forum Struts 1
    Réponses: 24
    Dernier message: 02/11/2005, 16h32

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