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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    37
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 37
    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 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
    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.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    37
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 37
    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 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
    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 ?

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    37
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 37
    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 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
    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

+ 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