Probleme d'affichage de table avec hibernate

Résolu/Fermé
juliette - 4 sept. 2008 à 12:54
Marco la baraque Messages postés 996 Date d'inscription vendredi 9 mai 2008 Statut Contributeur Dernière intervention 5 novembre 2009 - 5 sept. 2008 à 09:45
Bonjour,
je travaille avec myeclipse 5.1,strut et hibernate,et je desire afficher une liste d'orientations à partir d'une table orientation.le mapping s'est bien passé mais j'obtien un tableau vide,c'est comme s'il n'yavais pas d'elements dans la table,pourtant ce n'est pas le cas.

voici le code que j'ai utilisé pour recuperer la table:


public static List getOrientationList(){
Session session = HibernateSessionFactory.getSession();
List list = null;
try{
Query query=session.createQuery("from Orientation u ");
list =query.list();


}catch(Exception ex){
ex.printStackTrace();
}
return list;
}



et pour afficher la table dans une page jsp j'ai fais:

<body>


<table border="1">
<tbody>
<%-- set the header --%>
<tr>
<td>Orientations</td>

</tr>
<%-- check if orientation exists and display message
--%>

<logic:empty name="getListOrientationForm" property="orientations">
<tr>
<td colspan="3">No orientations available</td>
</tr>
</logic:empty>
<logic:notEmpty name="getListOrientationForm" property="orientations">
<logic:iterate name="orienttions" property="orientations" id="orientation" >
<tr>
<%-- print out the orientation informations --%>
<td><bean:write name="orientation" property="libelleorientation" />
</td>
</logic:iterate>
</logic:notEmpty>
<%-- end interate --%>
</tbody>
</table>
</body>


Veuillez ,s'il vous plait,jeter un coup d'oeil à mon pb,ça me bloque totalement et il faut que j'avance

merci

8 réponses

la methode getListOrientation() se trouve dans une classe ou j'ai mis toutes les methodes et que j'ai appellé ServiceUser.java.
lorsque mon action getListOrientationAction est appellée ,elle appelle la methode getListOrientation() via le code suivant:


public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {




GetListOrientationForm getListOrientationForm = (GetListOrientationForm) form;// TODO Auto-generated method stub

ServiceUser.getListOrientation();

return mapping.findForward("showList");

}

et l'action elle meme est associée à une form-bean:getListOrientationForm ou il y'a le code suivant:


public class GetListOrientationForm extends ActionForm {
private Collection orientations;

public Collection getOrientations() {
return orientations;
}
public void setOrientations(Collection orientations) {
this.orientations = orientations;

}

public void reset(ActionMapping mapping, HttpServletRequest request) {

orientations = new ArrayList();
}
0
- Pour la classe HibernateSessionFactory,elle est venue toute seule,elle est dans le repertoire hibernate que j'ai crée lorsque j'ai ajouter hibernate capabilities à mon projet.
- Avec les breakpoints la liste est tjs vide
-Et même avec la ligne de code que tu m'a filé,ça n'a pas marché.

Il se trouve que je suis debutante et que c'est ma premiere application de ce genre,peut étre que je me suis tromper dans la demarche,car moi j'ai crée une form,action and jsp.l'action son input est getOrientation.jsp ,qui est en meme temps son forword....je sais que c'est tiré par les cheveux,donc stp pourrais tu me proposer une demarche bien claire pour pouvoir afficher le contenu d'une table!


un trés grand merci
0
Marco la baraque Messages postés 996 Date d'inscription vendredi 9 mai 2008 Statut Contributeur Dernière intervention 5 novembre 2009 328
4 sept. 2008 à 22:18
Bonsoir,
En théorie ta démarche est bonne, du moins ce que j'en comprends :
tu as une jsp qui utilise des données contenues dans la classe action, qui elle fait appel à une classe service faisant une requête en base.

Je suis incapable de t'aider sur struts1, donc je ne sais pas si tu développes cette appli pour le plaisir et pour ton propre compte, mais si tu n'es pas pressée, je peux te développer un tutoriel pour te montrer comment on fait ça avec de l'hibernate, du spring si tu le souhaites, du struts2 (pas de form dans struts2, juste une classe action et un fichier xml qui se charge des redirections, forward..., c'est très simple et efficace).

Je suis assez débordé en ce moment, mais je peux te faire ça pour dans 2 semaines si ça te branche et si t'as le temps d'attendre.

Si tu n'as pas le temps, dis le moi, on va essayer de reprendre ton truc calmement et pas à pas.
-1
merci bcp Marco,c'est gentil à toi.Mais il se trouve que je suis en stage,et il me reste 15 jours pour rendre l'application et j'ai encore plein de chose à faire:l'ajout,la supression,la modif....mais je pense que si j'arrive à afficher la table ,le reste ne sera pas tres dificile à faire.Bref,le temps,c'est ce qui me manque
0
Marco la baraque Messages postés 996 Date d'inscription vendredi 9 mai 2008 Statut Contributeur Dernière intervention 5 novembre 2009 328
4 sept. 2008 à 23:00
Ok, pas de souci.

Avant de passer à l'affichage, on va s'occuper de la partie Hibernate. Et s'assurer qu'on extrait bien les données qu'on veut.
Une fois que ce sera fait, on passera la liste à Struts, et enfin, on affichera ça dans la jsp.

Pour configurer Hibernate, tu as 3 choses :
- le fichier xml, pour configurer ta BD, tes classes mappées... j'imagine que ça c'est bon
- tes java beans, qui sont de simples classes avec un constructeur par défaut et des accesseurs/mutateurs, et les annotations qui vont bien... tu m'as dit que ça aussi ça marchait
-enfin, pour faire les choses bien, on utilise des dao (Data Access Object) qui sont des interfaces s'occupant de la partie requêtage SQL...

Ensuite, tes classes service vont utiliser les dao pour obtenir les informations souhaitées.

Pour le code, on va prendre un exemple simple : un bean Personne comportant 2 attributs (je mets pas les import, je ne les connais pas par coeur) :
@Entity
@Table (name = "personne")
class Personne {

 private Integer id;
 private String nom;
 private String prenom;

 public Personne(){}

 @Id
 @GeneratedValue (strategy = GenerationType.AUTO) //laisse ton sgbd générer automatiquement les id
 public Integer getId() {
  return id;
 }

 public void setId(Integer id) {
  this.id = id;
 }

 public String getNom() {
  return nom;
 }

 public void setNom(String nom) {
  this.nom = nom;
 }

 //idem pour prenom
}

class Service {
 
 private PersonneDao personneDao = new PersonneDao(); 

 public List<Personne> cherchePersonne(String nom, String prenom) {
  return personneDao.chercherPersonne(nom, prenom);
 }

}

class PersonneDao {

 public List<Personne> cherchePersonne(String nom, String prenom) {
  Session session = HibernateUtil.getSessionFactory().getCurrentSession();
  session.beginTransaction();
  List<Personne> personnes = session.createQuery("from Personne where nom=" + nom + " and prenom=" + prenom).list(); 
 session.getTransaction().commit();
  return personnes;
 }
}

public class HibernateUtil {
 public static final SessionFactory sessionFactory;
 static {
  try {
   sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();
  } catch (Throwable e) {
   throw new ExceptionInInitializerError(e);
  }
 }

 public static SessionFactory getSessionFactory() {
  return sessionFactory;
 }
}


Voilà en gros comment il faut faire, après tu as des optimisations à faire. Par exemple utiliser des preparedStatement, améliorer la gestion des transactions pour les faire depuis tes classes service (tu peux en avoir besoin pour faire des rollback lorsque tu as plusieurs actions qui s'enchaînent)...

Teste ça via une classe JUnit par exemple, ça va te prendre 5minutes à développer et au moins on sera fixé quand au fait de savoir si tu as bien une liste d'objets retournés par Hibernate.
Une fois que ce sera fait, reviens vers moi, et on verra comment on avance (mais pour le reste je pense que tu étais à peu près ok, si tu rajoute la ligne que je t'avais donnée).

Cordialement,
-1
jUnit est un framework de test c'est ça??je pense que je l'ai pas.
aussi pour la classe ou tu as mis les attribut de personne et ses getters et setters,elle est generée par hibernate non??
0
Marco la baraque Messages postés 996 Date d'inscription vendredi 9 mai 2008 Statut Contributeur Dernière intervention 5 novembre 2009 328
4 sept. 2008 à 23:39
Junit ouai, mais c'est pas compliqué à installer en fait. Tu as juste un jar à ajouter à ton classpath pour pouvoir l'utiliser. Et peut-être même que c'est intégré à eclipse par défaut, vérifie tout de même.
Parce que c'est super restrictif de devoir monter toutes ses couches d'appli JEE avant de pouvoir tester, au final tu testes un produit développé sur 3 jours et donc bourré de bugs, il vaut mieux y aller pas à pas.

Pour le java bean, elle n'est pas générée automatiquement. Tu dois avoir des plugins eclipse (genre Hibernate Tools) qui permettent de générer ces classes à partir de ta base de données effectivement, regarde donc si tu peux les générer, sinon tu les fais à la main (là Personne est une classe bidon, mais parfois tu as des relations de foreign key qui sont un peu plus embêtantes à spécifier).
-1

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
desolée de t'embeter encore.mais pour le code que tu m'as donné est ce que je dois le mettre dans la form-bean ou l'action??
en fait pour la javabean,elle est generée par hibernate
0
Marco la baraque Messages postés 996 Date d'inscription vendredi 9 mai 2008 Statut Contributeur Dernière intervention 5 novembre 2009 328
5 sept. 2008 à 01:08
Non non, pour le moment on s'occupe que de la partie "modèle" du pattern MVC.
Tu dois donc écrire toutes ces classes à la main (sauf le bean puisque tu l'as généré).

On n'utilise absolument pas struts pour le moment. Une fois qu'on sera sûr que notre couche modèle fonctionne, alors on développera les actions et forms (la partie "contrôleur") afin de s'assurer que nos données transitent bien jusqu'à la vue, et enfin on développera notre jsp de manière à afficher correctement ces données.
-1
salut,
ça a enfin marché,tout fonctionne et la table orientation s'affiche.il a suffit d' ajouter getListOrientationForm.setOrientations(ServiceUser.getOrientationList()); dans l'action.

merci bcp,je t'en suis extremement reconnaissante
0
Marco la baraque Messages postés 996 Date d'inscription vendredi 9 mai 2008 Statut Contributeur Dernière intervention 5 novembre 2009 328
5 sept. 2008 à 09:45
Hello,
Heureux d'avoir pu t'aider. N'oublie pas de passer ton post en résolu, et à la prochaine.

Cordialement,
-1
Marco la baraque Messages postés 996 Date d'inscription vendredi 9 mai 2008 Statut Contributeur Dernière intervention 5 novembre 2009 328
4 sept. 2008 à 13:14
Bonjour Juliette,
Pourrais-tu donner quelques informations supplémentaires stp? Notamment sur les points suivants :
- expliquer globalement ton architecture, grosso modo si ta méthode getOrientationList() est appelée directement depuis tes actions struts, ou si tu passes par des classes intermédiaires
- expliquer comment et où tu gères ta connexion et tes transactions à la BD

Enfin, pourrais tu poser des breakpoints à la sortie de la méthode getOrientationList() afin de nous dire si déjà à cet endroit ta liste retournée est vide, ou détecter à quel endroit elle est vidée.

Merci

Cordialement,
-1
Marco la baraque Messages postés 996 Date d'inscription vendredi 9 mai 2008 Statut Contributeur Dernière intervention 5 novembre 2009 328
4 sept. 2008 à 20:22
Il y a certains points que je ne saisis pas trop :
- le premier, c'est ton HibernateSessionFactory.getSession(). Ca te retourne quoi si tu n'as pas de session active ? Ca t'en crée une ? Ta classe HibernateSessionFactory elle est dans quel package (j'ai regardé vite fait la doc hibernate mais elle n'a pas l'air d'être dedans, donc d'où vient-elle? D'un framework?).
- le second, c'est le ServiceUser.getListOrientation(); . La question que je me pose, c'est que ok, tu appelles bien ton service qui te retourne une liste. Mais comme tu ne récupères pas la liste retournée et que tu ne l'envoie nulle part, il ne faut pas t'étonner de ne rien avoir dans ta jsp.
Moi je ne connais pas struts1 (j'utilise struts2 qui est un peu différent), mais si je comprends bien, tu devrais stocker le retour de getListOrientation() dans la collection orientations, parce que c'est à elle que ta jsp essaie d'accéder.

Donc à mon avis, le code que tu devrais essayer avant tout c'est :
this.orientations = ServiceUser.getListOrientation(); 


Voilà, sinon tu ne m'as pas dit ce que donnaient les résultats des breakpoints.
Dernier point : ton code est tout simplement incompréhensible tel que tu l'exposes, ça ne nous aide pas à avancer, essaie peut-être de soigner un peu plus la présentation, on ira plus vite.

Cordialement,
-1