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 :

Problème d'affichage personnalisé de données d'une base


Sujet :

Struts 1 Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    37
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 37
    Points : 29
    Points
    29
    Par défaut Problème d'affichage personnalisé de données d'une base
    salut tout le monde,

    Pour afficher mes données de la base j'ai suivit le tutoriel du site

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <table>
     
    	<logic:iterate id="ligne" name="liste">
    		<tr>
    			<logic:iterate id="colonne" name="ligne">
    				<td><bean:write name="colonne" /></td>
    			</logic:iterate>
    		</tr>
    	</logic:iterate>
     
    </table>
    et çà marche bien .


    maintenant j'ai voulu afficher mes données de façon différente pour chaque colonne (pour la dernière colonne, je met la valeur comme paramètre d'un lien)
    avant de poster j'ai lu des threads similaires mais çà ne marche pas pour moi et je n'ai pas su la cause .
    voici mon code :

    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
     
    <table>
      <logic:iterate id="item" name="liste">
      <tr>
              <bean:define id="test1" name="item" property="nom" />
      <td><bean:write name="test1" /></td>
     
              <bean:define id="test2" name="item" property="id" />
      <td><html:link page="/validation.do?id='<bean:write name="test2" />' ">
    	  valider
              </html:link></td>
     
    <td><bean:write name="id" /></td>
    </tr>
    </logic:iterate>
    </table>
    je sais que la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <td> 
    <html:link page="/validation.do?id='<bean:write name="test2" />' ">
    ...
     
    </td>
    est louche , mais même sans tout le <td>..</td>, j'ai toujours le message :
    StandardWrapperValve[action]: Servlet.service() for servlet action threw exception
    javax.servlet.jsp.JspException: No getter method for property nom of bean item
    alors une idée comment résoudre cette erreur ?

    Merci beacoup

  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
    Si liste est bien une collection d'objets ayant pour propriété id et nom, il suffit de coder ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <table>
      <logic:iterate id="item" name="liste">
      <tr>
         <td><bean:write name="item" property="nom"/></td>
         <td><html:link action="validation?id=${item.id}">valider</html:link></td>
         <td><bean:write name="item" property="id"/></td>
      </tr>
      </logic:iterate>
    </table>
    Si tu n'es pas en J2EE 1.4, pour le lien, il faut utiliser la tld struts-html-el.tld :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <html-el:link action="validation?id=${item.id}">valider</html-el:link>
    sans oublier d'ajouter dans la jsp la directive taglib qui pointe sur struts-html-el.tld.
    Modératrice Java - Struts, Servlets/JSP, ...

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    37
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 37
    Points : 29
    Points
    29
    Par défaut
    c_nvy merci de m'avoir répondu .

    j'ai essayé la solution (sans le lien ) , mais j'obtiens l'erreur :

    javax.servlet.ServletException: No getter method for property nom of bean item
    est ce que je dois créer un bean ,j'ai quelque chose qui manque ... ?

    en plus, quand je met le lien (j'ai déjà importé struts-el.jar et struts_html-el.tld ) j'ai l'erreur :

    D'après la TLD, l'attribut action n'accepte aucune expression
    Alors une idée ?

    Merci

  4. #4
    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
    Que contient la collection liste ?
    Peux-tu montrer le code qui implémente la collection ?

    Sinon, peux-tu montrer le début de ton web.xml pour vérifier si tu es en J2EE 1.4 ?
    Et quelle version de Struts utilises-tu ?
    Modératrice Java - Struts, Servlets/JSP, ...

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    37
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 37
    Points : 29
    Points
    29
    Par défaut
    Merci de m'accorder de votre temps

    je travaille avec Jboss 4.0 et Struts 1.1 avec EasyEclipse 1.2.2 comme IDE .
    j'ai pas fais des choses plus que ce que j'ai appris dans le tutorial http://tahe.developpez.com/java/struts/

    Voici mon liste_chef.jsp :

    Code HTML : 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
     
    <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean"%>
    <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic"%>
    <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html"%>
    <%@ taglib uri="/WEB-INF/struts-html-el.tld" prefix="html-el"%>
     
    <html>
    <head>
    <title>Validation</title>
    </head>
    <body>
    <h3>Liste des conge :</h3>
    <hr>
     
    <table>
      <logic:iterate id="item" name="liste">
      <tr>
         <td><bean:write name="item" property="nom"/></td>
           <td><html-el:link page="validation?id=${item.id}">valider</html-el:link></td>
         <td><bean:write name="item" property="id"/></td>
      </tr>
      </logic:iterate>
    </table>
     
    </body>
    </html>

    voici mon ChefAction.java :


    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
     
     
     
        import org.apache.struts.action.Action;
        import java.io.IOException;
        import java.sql.Connection;
        import java.sql.ResultSet;
        import java.sql.Statement;
        import java.util.ArrayList;
        import javax.servlet.ServletException;
        import javax.servlet.http.HttpServletRequest;
        import javax.servlet.http.HttpServletResponse;
        import javax.sql.DataSource;
        import org.apache.struts.action.ActionError;
        import org.apache.struts.action.ActionErrors;
        import org.apache.struts.action.ActionForm;
        import org.apache.struts.action.ActionForward;
    import org.apache.struts.action.ActionMapping;
     
     
        public class ChefAction extends Action {
     
     
     
     
            public ActionForward execute(ActionMapping mapping, ActionForm form,
                    HttpServletRequest request, HttpServletResponse response)
                    throws IOException, ServletException {
                  // lit le contenu de la table articles d'une connexion
                  // réalisée à l'init du contexte
                  // on récupère a source de données dbarticles
                  DataSource dataSource = this.getDataSource(request, "dbstage");
                  if (dataSource == null) {
                    // la source de données n'a pas pu être créée
                    ActionErrors erreurs = new ActionErrors();
                    erreurs.add("dbarticles", new ActionError("erreur.dbarticles",
                        "La source de données n'a pu être créée "));
                //////
                    System.out.println("La source de données n'a pu être créée 2");
                    this.saveErrors(request, erreurs);
                    return mapping.findForward("erreurs2");
                  }
                  // ici la source de données existe - on l'exploite
                  Connection connexion = null;
                  Statement st = null;
                  ResultSet rs = null;
                  String requête = null;
                  ArrayList<String[]> liste = new ArrayList<String[]>();
                  // on gère les erreurs
                  try {
                    // obtenir une connexion
                    connexion = dataSource.getConnection();
                    // préparer la requête SQL
                    requête = "select id, nom from test order by nom";
                    // l'exécuter
                    st = connexion.createStatement();
                    rs = st.executeQuery(requête);
                    // exploiter les résultats
                    while (rs.next()) {
                      // enregistrer la ligne courante
                      liste.add(new String[] { rs.getString("id"),rs.getString("nom") });
                      // ligne suivante
                    } //while
                    // libérer les ressources
                    rs.close();
                    st.close();
                  } catch (Exception ex) {
                    // des erreurs se sont produites
                    ActionErrors erreurs = new ActionErrors();
                    erreurs.add("dbstage", new ActionError("erreur.dbstage"));
                    System.out.println("erreurs de charcgement de la base");
                    this.saveErrors(request, erreurs);
                    return mapping.findForward("erreurs2");
                  } finally {
                    // on libère la connexion
                    try {
                      connexion.close();
                    } catch (Exception ignored) {
                    }
                  }
                  // c'est bon
                  request.setAttribute("liste", liste);
                  return mapping.findForward("liste");
                } //execute
     
     
     
        }
    voici un extrait de struts-config.xml ( car elle est un peut longue )

    Code xml : 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
     
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE struts-config PUBLIC
               "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN"
               "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">
    <struts-config>
     
    <!--DATA : -->
     
    <data-sources>
      <data-source key="dbstage">
        <set-property property="driverClass" value="com.mysql.jdbc.Driver"></set-property>
        <set-property property="url" value="jdbc:mysql://127.0.0.1/dbstage"></set-property>
        <set-property property="user" value="root"></set-property>
        <set-property property="password" value="zied"></set-property>
        <set-property property="minCount" value="2"></set-property>
        <set-property property="maxCount" value="5"></set-property>
      </data-source>
    </data-sources>
     
    ...
     
     
    <action
      path="/validation_chef"
      type="cni.struts.ChefAction"
    >
     
      <forward name="liste" path="/liste_chef.do"/>
      <forward name="erreurs" path="/erreurs_validation.do"/>
    </action>
     
    <action
      path="/liste_chef"
      parameter="/view/liste_chef.jsp"
      type="org.apache.struts.actions.ForwardAction"
    />
     
    ...
    Voilà , j'espère qu'on trouvera bien une solution

  6. #6
    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
    liste n'est pas une collection d'objets ayant pour propriété id et nom, ce qui explique pourquoi tu as le message d'erreur.

    L'idéal serait de créer une classe Java Chef avec pour propriétés id et nom et getters et setters correspondants.

    Et ensuite, dans ton Action, il faudrait créer une ArrayList de beans Chef comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    while (rs.next())
    {
          Chef chef = new Chef() ;
          chef.setId(rs.getString("id") ;
          chef.setNom(rs.getString("nom") ;
          liste.add(chef);
    } //while
    Modératrice Java - Struts, Servlets/JSP, ...

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    37
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 37
    Points : 29
    Points
    29
    Par défaut
    J'ai ajouté une classe Chef comme vous m'avez dis :

    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
     
     
     
    public class Chef {
     
    	private String nom = null;
    	public String getNom() {
    	  return nom;
    	}
    	public void setNom(String nom) {
    	  this.nom = nom;
    	}
     
    	private String id = null;
    	public String getId() {
    	  return id;
    	}
    	public void setId(String id) {
    	  this.id = id;
    	}
     
     
    }
    puis j'ai changé mon ChefAction par votre code.

    Alors j'ai eu l'erreur :

    java.lang.Error: Unresolved compilation problem:
    The method add(String[]) in the type ArrayList<String[]> is not applicable for the arguments (Chef)
    délosé mais j'ai pas su quoi faire

  8. #8
    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
    C'est une ArrayList de beans Chef. Il faut donc la créer comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ArrayList<Chef> liste = new ArrayList<Chef>();
    Modératrice Java - Struts, Servlets/JSP, ...

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    37
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 37
    Points : 29
    Points
    29
    Par défaut
    c_nvy merci beaucoup d'être patiente avec moi et de me répondre jusqu'au bout.
    Effectivement quand j'ai changé le code de création de la liste çà marche parfaitement .

    Il me reste toute une petite chose , si j'insère :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      <td><html-el:link page="validation?id=${item.id}">valider</html-el:link></td>
    dans ma liste_chef.jsp, j'ai l'erreur :
    org.apache.jasper.JasperException: /view/liste_chef.jsp(18,6) D'après la TLD, l'attribut page n'accepte aucune expression
    Par contre quand j'ai fait comme dans la FAQ (8.Lien )

    çà marche bien.

    Merci encore c_nvy.

    Mais si quelq'un a une réponse pour cet erreur çà sera bénéfique.

  10. #10
    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
    As-tu la même erreur avec l'attribut action :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <html-el:link action="validation?id=${item.id}">valider</html-el:link>
    Si c'est le cas, c'est sans doute un problème de version.
    Ceci dit, utiliser l'attribut paramProperty est plus propre.
    Modératrice Java - Struts, Servlets/JSP, ...

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    37
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 37
    Points : 29
    Points
    29
    Par défaut
    oui, j'ai la même erreur avec l'attribut action, je pense que la balise <html-el:link > ne marche pas correctement....

    (car maintenant je travaille aussi avec l'attribut action mais de la balise <html:link >
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <html:link action="validation?id='${item.id}'">valider</html:link>
    ce qui nous mène à votre première réponse ,
    désolé mais je suis vraiment débutant , et je suis en train de découvrir Struts , les tag jsp .....)

    Maintenant , je me suis coincé dans une autre affère : (j'ai pensé la mettre dans un nouveau thread, mais puisque c'est une continuation ... ) :

    comment récupérer la valeur passé dans le lien dans mon action ( et par la même occasion dans une jsp )
    j'ai pensé que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    String e=(String) request.getAttribute("id");
    fera l'affaire , mais j'obtiens une valeur nulle.

  12. #12
    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
    Essaie plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String id=request.getParameter("id");
    Modératrice Java - Struts, Servlets/JSP, ...

  13. #13
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    37
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 37
    Points : 29
    Points
    29
    Par défaut
    Oui, Merci beaucoup

    En fait , j'ai cherché sur le net et je suis tombé sur votre réponse à un thread similaire ici

    Vraiment c_nvy t'es la meilleure

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 16/06/2010, 19h14
  2. [MySQL] Problème avec affichage des données d'une base MySQL
    Par leclone dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 27/12/2006, 12h40
  3. problème d'affichage d'un menu sur une image de fond
    Par Nata31 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 23/06/2006, 07h53
  4. [VB6]problème d'insertion des donneés dans une base d'Access2003
    Par lanbok dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 27/05/2006, 12h17
  5. [MySQL] Affichage des données d'une base
    Par leloup84 dans le forum PHP & Base de données
    Réponses: 30
    Dernier message: 01/02/2006, 16h35

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