Bonjour !
Je vous expose mon problème :
J'ai deux listes à choix multiples, la première est remplis par le unspecified de mon de mon DispatchAction grâce à une base de donnée.
Mon objectif est de selectionner une ou plusieurs options de cette liste et les faire basculer dans une seconde liste grâce a un JavaScript.
Jusque là tout va bien mais tout vas mal quand j'essaye de récuperer la seconde liste.
Je vous donne les bouts de code qui sont censés vous éclairer.
Voici ma jsp (boutton submit + listes)
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 <table> <tr> <td><html:submit value="Date du jour" onclick="selectAll(selList2, true); setDispatch('resetDate','formulaireBean');"></html:submit></td> </tr> </table> [...] <td> <html:select property="selList1" multiple="true" style="height: 150px; width: 250px;"> <html:options property="list11" /> </html:select> </td> <td> <html:button property="sr" value="->" onclick="simpleAdd('selList1', 'selList2');" /> <br/> <html:button property="dr" value="->>" onclick="addAll('selList1', 'selList2');" /> <br/><br/> <html:button property="sl" value="<-" onclick="simpleAdd('selList2', 'selList1');" /> <br/> <html:button property="dl" value="<<-" onclick="addAll('selList2', 'selList1');" /> </td> <td> <html:select property="selList2" multiple="true" style="height: 150px; width: 250px;"> <html:options property="list22" /> </html:select> </td>
Ici le boutton va juste remettre une date de mon formulaire à la date du jour et fait un return mapping.getInputForward(); au niveau de son action. Mais sans récuperer mes listes, celles-ci retourne à leur position initiale, donc on perd tout les mouvements effectué par l'utilisateur.
Voici mon action :
Voici mes JavaScripts
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 public ActionForward resetDate(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { FormulaireForm myForm = (FormulaireForm) form; //remise à la date du jour formuDAO = (FormulaireDAO) getServlet().getServletContext().getAttribute(Constants.FORMU_DAO_KEY); myForm.setDate(formater.format(today).toString()); toto = myForm.getSelList2(); myForm.setList22(toto); return mapping.getInputForward();
Code javascript : 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 function setDispatch(param, nomForm){ document.forms(nomForm).dispatch.value = param; } function simpleAdd(idOrig, idDest) { var objOrig = document.getElementById(idOrig); var objDest = document.getElementById(idDest); for (i = 0; i < objOrig.length; i++) { if (objOrig.options[i].selected == true) { var len=objDest.options.length++; objDest.options[len].text = objOrig.options[i].text; objDest.options[len].value = objOrig.options[i].value; } } for (i = objOrig.length - 1; i >= 0; i--) { if (objOrig.options[i].selected == true) { objOrig.options[i] = null; } } } function addAll(idOrig, idDest){ var objOrig = document.getElementById(idOrig); var objDest = document.getElementById(idDest); for (i = 0; i < objOrig.length; i++) { var option = new Option(objOrig.options[i].text, objOrig.options[i].value); objDest.options[objDest.options.length] = option; } for (i = objOrig.length - 1; i >= 0; i--) { objOrig.options[i] = null; } } function selectAll(idList, bool) { var objList = document.getElementById(idList); for (i = 0; i < objList.length; i++) { objList.options[i].selected = bool; } }
Actuellement j'essaye de faire un selectAll de ma seconde liste car j'ai cru comprendre que dans le bean le select passait uniquement les options selectionnées. Mais mon script plante sur la ligne "for (i = 0; i < objList.length; i++)"
Lorsque je lance l'action resetDate, j'ai une exception lié a mon action car étant donné que mon premier script selectAll ne fonctionne pas, le second script setDispatch ne s'execute pas, donc pas d'action ce qui est normal.
Si vous avez besoin de plus d'infos je vous les fournirai volontier !
Ca fait a peine 1 semaine que je découvre le JavaScript donc j'ai encore du mal a saisir pas mal de notions.
Je tiens aussi a préciser que ca fait 1 mois que je fais de la POO et donc du développement Web, si vous voyez des incohérences dans mon code n'hésitez surtout pas a me le signaler je suis prenneur
Bon appétit.
Cdlt.
Partager