Envoyé par c_nvy
oui oui effectivement, je viens juste d'éditer mon post car je me suis rendu compte de l'énorme erreur... merci encore
Envoyé par c_nvy
oui oui effectivement, je viens juste d'éditer mon post car je me suis rendu compte de l'énorme erreur... merci encore
voila, maintenant j'ai une exception :![]()
voila à quoi ressemble mon UpdateEvaluationAction :
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 javax.servlet.ServletException: BeanUtils.populate org.apache.struts.util.RequestUtils.populate(RequestUtils.java:1254) org.apache.struts.action.RequestProcessor.processPopulate(RequestProcessor.java:821) org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:254) org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482) org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525) javax.servlet.http.HttpServlet.service(HttpServlet.java:709) javax.servlet.http.HttpServlet.service(HttpServlet.java:802) org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:362) cause mère java.lang.NullPointerException org.apache.commons.beanutils.PropertyUtils.getIndexedProperty(PropertyUtils.java:515) org.apache.commons.beanutils.PropertyUtils.getIndexedProperty(PropertyUtils.java:428) org.apache.commons.beanutils.PropertyUtils.getNestedProperty(PropertyUtils.java:770) org.apache.commons.beanutils.PropertyUtils.getProperty(PropertyUtils.java:801) org.apache.commons.beanutils.BeanUtils.setProperty(BeanUtils.java:881) org.apache.commons.beanutils.BeanUtils.populate(BeanUtils.java:808) org.apache.struts.util.RequestUtils.populate(RequestUtils.java:1252) org.apache.struts.action.RequestProcessor.processPopulate(RequestProcessor.java:821) org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:254) org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482) org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525) javax.servlet.http.HttpServlet.service(HttpServlet.java:709) javax.servlet.http.HttpServlet.service(HttpServlet.java:802) org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:362)
J'ai mis un breakpoint au début de ma fontion pour voir ce qui passait, mais apparemment il ne passe meme pas dedans puisque l'exception est générée directement sans que je m'arrete sur ce breakpoint....
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 public class UpdateEvaluationAction extends Action { public ActionForward perform(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { UpdateEvaluationForm updateForm = (UpdateEvaluationForm) form; HttpSession session = request.getSession(true); GestionnaireEvaluation GEval=new GestionnaireEvaluation(); Evaluation evaluation=(Evaluation)session.getAttribute("evaluation"); int idEval =evaluation.getIdEval(); // on rempli l'objet evaluation avec les données du formulaire String remEleve=updateForm.getRemarqueEleveGen(); StringMySQLConverter convRemEleve= new StringMySQLConverter(remEleve); remEleve = convRemEleve.adapterPourMySQL(); evaluation.setRemEl(remEleve); String remColl=updateForm.getRemarqueCollegeGen(); StringMySQLConverter convRemCollege= new StringMySQLConverter(remColl); remColl = convRemCollege.adapterPourMySQL(); evaluation.setRemColl(remColl); String remEntreprise=updateForm.getRemarqueEntrepriseGen(); StringMySQLConverter convRemEntreprise= new StringMySQLConverter(remEntreprise); remEntreprise = convRemEntreprise.adapterPourMySQL(); evaluation.setRemEnt(remEntreprise); GEval.updateEvaluation(evaluation); // on met à jour l'evaluation dans la base GestionnaireEvaluationBesoin GEvalBes=new GestionnaireEvaluationBesoin(); Vector listeEvalBesEleve=updateForm.getListeEvalEleve(); Iterator itElev=listeEvalBesEleve.iterator(); while (itElev.hasNext()) { EvaluationBesoin evalBes = (EvaluationBesoin)itElev.next(); GEvalBes.updateEvaluationBesoin(evalBes); } Vector listeEvalBesEntreprise=updateForm.getListeEvalEntreprise(); Iterator itEnt=listeEvalBesEntreprise.iterator(); while (itEnt.hasNext()) { EvaluationBesoin evalBes = (EvaluationBesoin)itEnt.next(); GEvalBes.updateEvaluationBesoin(evalBes); } Vector listeEvalBesCollege=updateForm.getListeEvalCollege(); Iterator itColl=listeEvalBesCollege.iterator(); while (itColl.hasNext()) { EvaluationBesoin evalBes = (EvaluationBesoin)itColl.next(); GEvalBes.updateEvaluationBesoin(evalBes); } session.removeAttribute("updateForm"); // on supprime l'attribut updateForm de la session return mapping.findForward("success"); } }
Quel scope as-tu mis dans le mapping des Actions liées à l'ActionForm UpdateEvaluationForm dans le struts-config.xml ?
Dans ton cas, il faut mettre un scope="session".![]()
j'avais scope="request", c'est ce que je met pour tout mesz formulaires de ce type et ça fontionne...
j'ai essayé avec scope="session" mais le problem reste le meme, tjrs la meme exception![]()
voici les lignes du struts-config.xml qui nous interessent :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 <action name="updateEvaluation" path="/updateEvaluation" scope="session" type="projet.action.UpdateEvaluationAction"> <forward name="success" path="/listeEleve.do" /> </action> <action name="updateEvaluation" path="/vueEvaluation" scope="request" type="projet.action.VueEvaluationAction" validate="false"> <forward name="view" path="/pages/vueEvaluation.jsp" /> <forward name="modif" path="/pages/modifEvaluation.jsp" /> <forward name="fail" path="/pages/login.jsp" /> </action>
As-tu essayé en mettant scope="session" également sur ton Action de path /vueEvaluation ?
ça fonctionnait parce que tu mettais les propriétés de ton formulaire dans le scope via des request.setAttribute et non via les setters du formulaire.Envoyé par romarseille
Ton form-bean doit obligatoirement être en scope session pour pouvoir être accédé par les deux Actions.![]()
Merci beaucoup, beaucoup, beaucoup....![]()
Le probleme venait effectivement du scope....
Désolé,
une dernière petite question...
En règle générale, pour le mapping des formulaires, la logique veut que l'on utilise tout le temps scope="session" ?
Ou bien celà dépent-il des cas ? car dans mon appli j'ai pas mal de formulaires pour lesquels le mapping est à scope="request"...
ça dépend des cas.
Le scope session n'est utile que si ton form-bean est partagé entre plusieurs actions, comme dans le cas traité dans cette discussion.
En effet, dans ton cas, la requête commence à l'appel de l'Action qui initialise le formulaire.
Quand la jsp s'affiche, la réponse a été construite et envoyée au navigateur, ce qui signifie que la requête est terminée.
Si tu es en scope request, le form-bean rempli n'est plus accessible au submit du formulaire, parce que c'est une nouvelle requête qui est envoyée.
Voilà pourquoi il faut utiliser le scope session dans ce cas-là.
Je ne sais pas si c'est assez clair.![]()
Pour un form-bean lié à une seule Action, un scope request suffit.![]()
ok,
merci pour la reponse (ça va c'était assez clair, enfin j'ai compris, c'est le principal)
Partager