Recuperer la valeur selectionnée avec struts
Fermé
juliette123
Messages postés
23
Date d'inscription
dimanche 7 septembre 2008
Statut
Membre
Dernière intervention
1 janvier 2009
-
28 sept. 2008 à 15:41
juliette123 Messages postés 23 Date d'inscription dimanche 7 septembre 2008 Statut Membre Dernière intervention 1 janvier 2009 - 10 oct. 2008 à 19:46
juliette123 Messages postés 23 Date d'inscription dimanche 7 septembre 2008 Statut Membre Dernière intervention 1 janvier 2009 - 10 oct. 2008 à 19:46
A voir également:
- Recuperer la valeur selectionnée avec struts
- Recuperer video youtube - Guide
- Recuperer message whatsapp supprimé - Guide
- Comment récupérer un compte facebook piraté - Guide
- Impossible de récupérer mon compte gmail - Guide
- Récupérer mon compte facebook désactivé - Guide
9 réponses
juliette123
Messages postés
23
Date d'inscription
dimanche 7 septembre 2008
Statut
Membre
Dernière intervention
1 janvier 2009
3
29 sept. 2008 à 12:00
29 sept. 2008 à 12:00
salut Marco,ça fait plaisir de te retrouver sur le forum.
oui,je travaille tjs avec struts1
voici le code de la liste:
mon dernier recours est d'utiliser Ajax,mais je me suis dite qu'il est impossible que struts ne fait pas ça
oui,je travaille tjs avec struts1
voici le code de la liste:
<logic:iterate id="utilisateur" name="utilisateur" scope="session" type="data.Utilisateur"> <td class="Style2"> Objectifs individuel :</td> <td> <select name="objIndiv" id="objIndiv" onChange=update(this); > <% Iterator it = GetList.getObjByUserId(id).iterator(); String ob=null; while(it.hasNext()){ ObjIndiv objindiv =(ObjIndiv)it.next(); ob=objindiv.getLibelleObjIndiv(); %> <option type="text" size="50" value="<%=objindiv.getLibelleObjIndiv()%>"><%=ob %> </option> <%}%> </select> </td> </logic:iterator>
mon dernier recours est d'utiliser Ajax,mais je me suis dite qu'il est impossible que struts ne fait pas ça
Marco la baraque
Messages postés
996
Date d'inscription
vendredi 9 mai 2008
Statut
Contributeur
Dernière intervention
5 novembre 2009
329
28 sept. 2008 à 21:00
28 sept. 2008 à 21:00
Salut juliette123,
Tu bosses toujours avec struts1 ?
Quel tag utilises-tu? html:select?
Cordialement,
Tu bosses toujours avec struts1 ?
Quel tag utilises-tu? html:select?
Cordialement,
juliette123
Messages postés
23
Date d'inscription
dimanche 7 septembre 2008
Statut
Membre
Dernière intervention
1 janvier 2009
3
2 oct. 2008 à 22:37
2 oct. 2008 à 22:37
salut marco,effectivement il s'est averé que maListe était vide,il y'avait un probleme au niveau de la methode qui la recupère.
alors j'ai essayé avec une autre liste dont je suis sûre qu'elle n'est pas vide et elle marche très bien ,avec cette methode:
mais dès que j'ajoute une condition du type:
je pense que c'est juste un problme de requette
alors j'ai essayé avec une autre liste dont je suis sûre qu'elle n'est pas vide et elle marche très bien ,avec cette methode:
public static List getPhaseByCode(){ Session session = HibernateSessionFactory.getSession(); List list = null; try{ Query query=session.createQuery(" from Phase u " ); list =query.list(); }catch(Exception ex){ ex.printStackTrace(); } return list; }
mais dès que j'ajoute une condition du type:
public static List getPhaseByCode(String code){ Session session = HibernateSessionFactory.getSession(); List list = null; try{ Query query=session.createQuery(" from Phase u where u.codeObjIndiv=" +code ); list =query.list(); }catch(Exception ex){ ex.printStackTrace(); } return list; }
je pense que c'est juste un problme de requette
juliette123
Messages postés
23
Date d'inscription
dimanche 7 septembre 2008
Statut
Membre
Dernière intervention
1 janvier 2009
3
2 oct. 2008 à 22:54
2 oct. 2008 à 22:54
rebonjours,
j'ai essayé avec d'autres attributs dans la requette(idPhase,numPhase...)et ça marche très bien,le probleme c'est que l'association Phase,ObjIndiv est une association many to one,à chaque ObjIndiv correspond plusieurs phases,peut etre que le probleme vient de là
j'ai essayé avec d'autres attributs dans la requette(idPhase,numPhase...)et ça marche très bien,le probleme c'est que l'association Phase,ObjIndiv est une association many to one,à chaque ObjIndiv correspond plusieurs phases,peut etre que le probleme vient de là
Marco la baraque
Messages postés
996
Date d'inscription
vendredi 9 mai 2008
Statut
Contributeur
Dernière intervention
5 novembre 2009
329
2 oct. 2008 à 23:07
2 oct. 2008 à 23:07
Bonsoir Juliette,
Ok, on passe donc d'un problème Struts à un problème Hibernate. On avance.
Peux-tu me donner le code de ta classe Phase stp ?
Ce qui m'intéresse surtout c'est :
- comment tu déclares l'attribut codeObjIndiv ?
- quelles annotations as tu utilisé pour configurer ta relation ManyToOne (ou si tu n'utilises pas d'annotations, peux-tu joindre ton fichier xml stp).
Merci
Ok, on passe donc d'un problème Struts à un problème Hibernate. On avance.
Peux-tu me donner le code de ta classe Phase stp ?
Ce qui m'intéresse surtout c'est :
- comment tu déclares l'attribut codeObjIndiv ?
- quelles annotations as tu utilisé pour configurer ta relation ManyToOne (ou si tu n'utilises pas d'annotations, peux-tu joindre ton fichier xml stp).
Merci
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
juliette123
Messages postés
23
Date d'inscription
dimanche 7 septembre 2008
Statut
Membre
Dernière intervention
1 janvier 2009
3
2 oct. 2008 à 23:16
2 oct. 2008 à 23:16
voici le fichier Phase.hbm.xml:
la classe Phase.java:
et la classe AbstactPhase.javva:
pas de codeObjIndiv!!
<hibernate-mapping> <class name="data.Phase" table="PHASE" schema="BASE"> <id name="idphase" type="java.lang.Long"> <column name="IDPHASE" precision="22" scale="0" /> <generator class="increment"></generator> </id> <many-to-one name="objIndiv" class="data.ObjIndiv" fetch="select"> <column name="CODE_OBJ_INDIV" length="20" not-null="true" /> </many-to-one> <property name="libellePhase" type="java.lang.String"> <column name="LIBELLE_PHASE" length="100" /> </property> <property name="dateDeb" type="java.util.Date"> <column name="DATE_DEB" length="7" /> </property> <property name="dateFin" type="java.util.Date"> <column name="DATE_FIN" length="7" /> </property> <property name="duree" type="java.lang.String"> <column name="DUREE" length="20" /> </property> <property name="numphase" type="java.lang.Long"> <column name="NUMPHASE" precision="22" scale="0" not-null="true" /> </property> <set name="necessiters" inverse="true"> <key> <column name="IDPHASE" precision="22" scale="0" not-null="true" /> </key> <one-to-many class="data.Necessiter" /> </set> </class> </hibernate-mapping>
la classe Phase.java:
public class Phase extends AbstractPhase implements java.io.Serializable { // Constructors /** default constructor */ public Phase() { } /** minimal constructor */ public Phase(ObjIndiv objIndiv, Long numphase) { super(objIndiv, numphase); } /** full constructor */ public Phase(ObjIndiv objIndiv, String libellePhase, Date dateDeb, Date dateFin, String duree, Long numphase, Set necessiters) { super(objIndiv, libellePhase, dateDeb, dateFin, duree, numphase, necessiters); } }
et la classe AbstactPhase.javva:
public abstract class AbstractPhase implements java.io.Serializable { // Fields private Long idphase; private ObjIndiv objIndiv; private String libellePhase; private Date dateDeb; private Date dateFin; private String duree; private Long numphase; private Set necessiters = new HashSet(0); // Constructors /** default constructor */ public AbstractPhase() { } /** minimal constructor */ public AbstractPhase(ObjIndiv objIndiv, Long numphase) { this.objIndiv = objIndiv; this.numphase = numphase; } /** full constructor */ public AbstractPhase(ObjIndiv objIndiv, String libellePhase, Date dateDeb, Date dateFin, String duree, Long numphase, Set necessiters) { this.objIndiv = objIndiv; this.libellePhase = libellePhase; this.dateDeb = dateDeb; this.dateFin = dateFin; this.duree = duree; this.numphase = numphase; this.necessiters = necessiters; } //accessors
pas de codeObjIndiv!!
Marco la baraque
Messages postés
996
Date d'inscription
vendredi 9 mai 2008
Statut
Contributeur
Dernière intervention
5 novembre 2009
329
3 oct. 2008 à 00:56
3 oct. 2008 à 00:56
Rebonsoir,
Je pense que c'est normal que ta requête "from Phase u where u.codeObjIndiv=" +code ne marche pas, vu que tu n'as pas d'attribut codeObjIndiv.
Dans ta classe AbstractPhase tu as ceci :
Tes objets Phase vont donc hériter de cet attribut et de cette méthode, donc en principe la requête suivante devrait marcher :
"from Phase u where u.objIndiv = " + code
Cependant, si c'est effectivement le cas, tu aurais du avoir une exception lors de ta précédente requête signalant que ta classe Phase ne possède pas d'argument codeObjIndiv.
Si cette solution ne fonctionne pas, on regardera alors plus en avant dans le fichier xml.
Je pense que c'est normal que ta requête "from Phase u where u.codeObjIndiv=" +code ne marche pas, vu que tu n'as pas d'attribut codeObjIndiv.
Dans ta classe AbstractPhase tu as ceci :
private ObjIndiv objIndiv; //Et je suppose l'accesseur correspondant : public ObjIndiv getObjIndiv() { return objIndiv; }
Tes objets Phase vont donc hériter de cet attribut et de cette méthode, donc en principe la requête suivante devrait marcher :
"from Phase u where u.objIndiv = " + code
Cependant, si c'est effectivement le cas, tu aurais du avoir une exception lors de ta précédente requête signalant que ta classe Phase ne possède pas d'argument codeObjIndiv.
Si cette solution ne fonctionne pas, on regardera alors plus en avant dans le fichier xml.
juliette123
Messages postés
23
Date d'inscription
dimanche 7 septembre 2008
Statut
Membre
Dernière intervention
1 janvier 2009
3
3 oct. 2008 à 01:03
3 oct. 2008 à 01:03
oui c'est ce que je me suis dis,mais objIndiv est une classe,il s'agit en fait d'une table,qu'est ce que j'aurais donc dans code,l'id??
Marco la baraque
Messages postés
996
Date d'inscription
vendredi 9 mai 2008
Statut
Contributeur
Dernière intervention
5 novembre 2009
329
3 oct. 2008 à 12:16
3 oct. 2008 à 12:16
Bonjour,
Oui, la requête que tu tapes ici c'est du HQL, c'est-à-dire que tu dois faire abstraction de la réalisation SQL pour utiliser ta conception objet. Quand tu fais u.toto, Hibernate ne va pas regarder si tu as une colonne 'toto' dans ta table Phase, mais il va essayer d'accéder à la méthode getToto() de ta classe Phase.
Cordialement,
Oui, la requête que tu tapes ici c'est du HQL, c'est-à-dire que tu dois faire abstraction de la réalisation SQL pour utiliser ta conception objet. Quand tu fais u.toto, Hibernate ne va pas regarder si tu as une colonne 'toto' dans ta table Phase, mais il va essayer d'accéder à la méthode getToto() de ta classe Phase.
Cordialement,
juliette123
Messages postés
23
Date d'inscription
dimanche 7 septembre 2008
Statut
Membre
Dernière intervention
1 janvier 2009
3
3 oct. 2008 à 01:10
3 oct. 2008 à 01:10
ça a marché ,je lui est donné l'id.ouf un probleme de moins,mtn je doix voir cet histoir d'Ajax
juliette123
Messages postés
23
Date d'inscription
dimanche 7 septembre 2008
Statut
Membre
Dernière intervention
1 janvier 2009
3
4 oct. 2008 à 01:36
4 oct. 2008 à 01:36
bonjours,
comme je t'es dis ça a marché en utilisant l'id,mais je l'id qui est ici le code est de type String,alors je ne sais pas quoi faire au nivau de la declaration de la fct:
ça:
ou ça:
sachant que le code que je vais utiliser c'est la valeur selectionnée dans le select des objectifs,et que je vais recuperer avec ajax,il sera dond de type String
comme je t'es dis ça a marché en utilisant l'id,mais je l'id qui est ici le code est de type String,alors je ne sais pas quoi faire au nivau de la declaration de la fct:
ça:
public static List getPhaseByCode(ObjIndiv code){ Session session = HibernateSessionFactory.getSession(); List list = null; try{ Query query=session.createQuery(" from Phase u where objIndiv="+code ); list =query.list(); }catch(Exception ex){ ex.printStackTrace(); } return list; }
ou ça:
public static List getPhaseByCode(String code){ Session session = HibernateSessionFactory.getSession(); List list = null; try{ Query query=session.createQuery(" from Phase u where objIndiv="+code ); list =query.list(); }catch(Exception ex){ ex.printStackTrace(); } return list; }
sachant que le code que je vais utiliser c'est la valeur selectionnée dans le select des objectifs,et que je vais recuperer avec ajax,il sera dond de type String
Marco la baraque
Messages postés
996
Date d'inscription
vendredi 9 mai 2008
Statut
Contributeur
Dernière intervention
5 novembre 2009
329
10 oct. 2008 à 19:32
10 oct. 2008 à 19:32
Salut Juliette,
Désolé pour le manque de réactivité, j'étais en vacances.
Je dirais que la réponse dépend de ta façon de coder. Mes solutions :
1- Tu reçois un string de ta request. Ce string (ton id), tu vas l'utiliser pour faire une recherche en BD afin de récupérer ton objet ObjIndiv, et une fois récupéré, tu vas faire appel à ta méthode getPhaseByCode( ObjIndiv obj).
2- Si ton objet indiv est uniquement composé du code, tu crées un constructeur prenant un string en argument, tu crées ton objet et tu fais appel à ta méthode getPhaseByCode( ObjIndiv obj).
La première méthode est plus gourmande parce que tu fais une vérification en BD : si ton objet n'existe pas (erreur de saisie de l'utilisateur ou tentative de piratage), une exception est levée et tu peux la traiter. Cependant, cette vérification est une requête en base de donnée, donc tu dois t'arranger pour l'insérer dans une transaction existante si tu veux que ce ne soit pas trop coûteux en temps.
En général c'est ce qui est fait : il faut toujours vérifier les données envoyées dans la request avant de les traiter tels quels.
Ainsi, la seconde méthode est plus risquée : tu crées un objet directement depuis la string récupérée, sans vérifier que ton objet indiv existe en base, et ça peux être dangereux.
Cordialement,
Désolé pour le manque de réactivité, j'étais en vacances.
Je dirais que la réponse dépend de ta façon de coder. Mes solutions :
1- Tu reçois un string de ta request. Ce string (ton id), tu vas l'utiliser pour faire une recherche en BD afin de récupérer ton objet ObjIndiv, et une fois récupéré, tu vas faire appel à ta méthode getPhaseByCode( ObjIndiv obj).
2- Si ton objet indiv est uniquement composé du code, tu crées un constructeur prenant un string en argument, tu crées ton objet et tu fais appel à ta méthode getPhaseByCode( ObjIndiv obj).
La première méthode est plus gourmande parce que tu fais une vérification en BD : si ton objet n'existe pas (erreur de saisie de l'utilisateur ou tentative de piratage), une exception est levée et tu peux la traiter. Cependant, cette vérification est une requête en base de donnée, donc tu dois t'arranger pour l'insérer dans une transaction existante si tu veux que ce ne soit pas trop coûteux en temps.
En général c'est ce qui est fait : il faut toujours vérifier les données envoyées dans la request avant de les traiter tels quels.
Ainsi, la seconde méthode est plus risquée : tu crées un objet directement depuis la string récupérée, sans vérifier que ton objet indiv existe en base, et ça peux être dangereux.
Cordialement,
juliette123
Messages postés
23
Date d'inscription
dimanche 7 septembre 2008
Statut
Membre
Dernière intervention
1 janvier 2009
3
10 oct. 2008 à 19:46
10 oct. 2008 à 19:46
salut marco,j'espère que tes vaccances se sont bien passées.En fait j'ai fini par utiliser String code,et depuis j'ai travaillé sur ajax afin de recuperer le code,chose que j'ai reussis à faire,mais voilà que je m'affronte à un nouveau probleme,dailleurs j'ai posté un message ici:
http://www.commentcamarche.net/forum/affich 8816182 probleme de methode parametrable?#
http://www.commentcamarche.net/forum/affich 8816182 probleme de methode parametrable?#
29 sept. 2008 à 22:02
Dans ta jsp tu utilises le tag <select> qui n'est pas un tag Struts.
Pour faire ce que tu souhaites, tu dois utiliser le tag struts <html:select> (l'attribut property te permet de spécifier le nom du paramètre qui sera envoyé dans ta requête lors du submit).
Cependant, ce tag <html:select> doit être inclus dans un tag <s:form>, et la valeur ne sera donc envoyée que lorsque tu feras un submit de ton formulaire.
Par contre, si tu veux récupérer ta valeur dès que tu la changes, il te faut utiliser ajax (soit pour forcer un submit du formulaire, je n'ai jamais fait ça mais j'imagine que c'est possible; soit pour créer un xmlHttpRequest pour envoyer la nouvelle valeur au serveur).
Cordialement,
30 sept. 2008 à 12:16
j'ai essayé avec le tag html:select,mais il me genère cette erreur:Cannot find bean under name maListe
avec dans l'action:
et dans la jsp:
j'ai beau cherché sur le net,il y'a pas mal de personne qui ont eu cette erreur,mais pas de solution!!
1 oct. 2008 à 14:37
Tout d'abord, vérifie bien que maListe n'est pas null. Ensuite essaie ça stp :
Si ça ne fonctionne pas de suite, essaie de mettre maListe dans la request et non pas dans la session (je ne sais pas si ça répond à ton besoin, mais essaie tout de même).
Cordialement,