Bonjour à tous,
Dans une page JSP, j'ai une table avec une colonne checkbox qui me permet de sélectionner des lignes, et je voudrais en cliquant sur un bouton récupérer les lignes sélectionnées.
J'ai lu différents tutoriaux sur le site de SUN, et j'en suis arrivé à produire le code suivant.
Partie de ma JSP :
Et voici la partie de mon fichier 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 <ui:panelLayout binding="#{order_card_edit.lyp2}" id="lyp2" style="left: 0px; top: 462px; position: absolute; width: 100%; -rave-layout: grid"> <ui:table binding="#{order_card_edit.t1}" deselectMultipleButton="true" id="t1" lite="true" selectMultipleButton="true" style="left: 1%; top: 65px; position: absolute" title="Détail des articles de la commande" width="98%"> <ui:tableRowGroup binding="#{order_card_edit.row1}" id="row1" rows="5" sourceData="#{order_card_edit.xtmp_orderDataProvider}" sourceVar="currentRow"> <ui:tableColumn align="center" binding="#{order_card_edit.col1}" id="col1" selectId="ck1" style="#{order_card_edit.selectedStyle}"> <ui:checkbox binding="#{order_card_edit.ck1}" id="ck1" immediate="true" onClick="document.getElementById("form1:t1").initAllRows();" selected="#{order_card_edit.selected}"/> </ui:tableColumn> <ui:tableColumn binding="#{order_card_edit.col2}" headerText="Ligne" id="col2" style="#{order_card_edit.selectedStyle}"> <ui:staticText binding="#{order_card_edit.staticText1}" id="staticText1" text="#{currentRow.value['xtmp_order.LINE_NUMBER']}" style="width: 98%"/> </ui:tableColumn> <ui:tableColumn align="right" binding="#{order_card_edit.col3}" headerText="Qté." id="col3" style="#{order_card_edit.selectedStyle}"> <ui:textField binding="#{order_card_edit.lv1}" id="lv1" style="text-align: right; width: 98%" styleClass="edit-box" text="#{currentRow.value['QTY']}" visible="#{order_card_edit.editMode}"/> <ui:label binding="#{order_card_edit.label2}" id="label2" rendered="#{!order_card_edit.editMode}" text="#{currentRow.value['QTY']}"/> </ui:tableColumn> <ui:tableColumn align="center" binding="#{order_card_edit.col12}" id="col12" style="#{order_card_edit.selectedStyle}" width="90"> <ui:hyperlink action="#{order_card_edit.edit_line}" binding="#{order_card_edit.llnk1}" id="llnk1" rendered="#{!order_card_edit.editMode}" text="Modifier"> <ui:image binding="#{order_card_edit.ic1}" height="22" id="ic1" url="/resources/edit2.png" width="22"/> </ui:hyperlink> <ui:hyperlink action="#{order_card_edit.ok_line}" binding="#{order_card_edit.llnk2}" id="llnk2" visible="#{order_card_edit.editMode}"> <ui:image binding="#{order_card_edit.ic2}" height="22" hspace="5" id="ic2" url="/resources/ok2.png" vspace="1" width="22"/> </ui:hyperlink> <ui:hyperlink action="#{order_card_edit.cancel_line}" binding="#{order_card_edit.llnk3}" id="llnk3" visible="#{order_card_edit.editMode}"> <ui:image binding="#{order_card_edit.ic3}" height="22" hspace="5" id="ic3" url="/resources/cancel2.png" width="22"/> </ui:hyperlink> </ui:tableColumn> </ui:tableRowGroup> </ui:table> <ui:hyperlink action="#{order_card_edit.del_action}" binding="#{order_card_edit.hlnk3}" id="hlnk3" immediate="true" style="left: 648px; top: 0px; position: absolute; width: 166px" styleClass="icobuton"> <ui:staticText binding="#{order_card_edit.lbl23}" id="lbl23" styleClass="icobuton0" text="Supprimer ligne(s)"/> <ui:image binding="#{order_card_edit.pic5}" height="32" id="pic5" url="/resources/trash.png" width="32"/> </ui:hyperlink> <ui:textField binding="#{order_card_edit.textField3}" id="textField3" style="width: 552px; left: 200px; top: 40px;" styleClass="edit-box" text="#{order_card_edit.xtmp_orderDataProvider.value['xtmp_order.COMMENT']}" visible="false"/> <ui:label binding="#{order_card_edit.label5}" id="label5" style="height: 24px; width: 176px; left: 24px; top: 40px;" text="Commentaire de la ligne" visible="false"/> </ui:panelLayout>
Si je clique sur le lien supprimer(et si des lignes sont sélectionnées), la méthode del_action est bien exécutée, mais la variable selectedRows est toujours vide.
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 private HashSet selectedRows = new HashSet(); public boolean isSelected() { TableRowDataProvider rowData = (TableRowDataProvider) getBean("currentRow"); if (rowData.getTableRow().equals(curr_row)){ return true; } return false; } public void setSelected(boolean selected) { TableRowDataProvider rowData = (TableRowDataProvider)getBean("currentRow"); RowKey rowKey = rowData.getTableRow(); if (ck1.isChecked()) { selectedRows.add(rowKey); } else { selectedRows.remove(rowKey); } } public String getSelectedStyle(){ TableRowDataProvider rowData = (TableRowDataProvider) getBean("currentRow"); if (rowData.getTableRow().equals(curr_row)){ return "background-color: rgb(204, 204, 255)"; } return " "; } public String del_action() { //TableRowDataProvider rowData = TableRowDataProvider)getBean("currentRow"); //RowKey rowKey2 = rowData.getTableRow(); //RowKey[] rk=t1.getTableRowGroupChild().getRenderedSelectedRowKeys(); //Array ar=(Object [])rk; Iterator rowKeys = selectedRows.iterator(); while (rowKeys.hasNext()) { RowKey rowKey = (RowKey) rowKeys.next(); Integer i=(Integer)xtmp_orderDataProvider.getValue("xtmp_order.LINE_NUMBER", rowKey); int j=i.intValue(); try { Context initCtx = new InitialContext(); DataSource ds = (DataSource) initCtx.lookup("java:comp/env/jdbc/mos_data"); Connection connect = ds.getConnection(); PreparedStatement ps = connect.prepareStatement("DELETE FROM xtmp_order WHERE xtmp_order.SESSION_ID='"+getSessionBean1().getSessionId()+"' AND xtmp_order.LINE_NUMBER="+j); ps.execute(); ps=connect.prepareStatement("UPDATE xtmp_order SET xtmp_order.LINE_NUMBER=xtmp_order.LINE_NUMBER-1 WHERE xtmp_order.SESSION_ID='"+getSessionBean1().getSessionId()+"' AND xtmp_order.LINE_NUMBER>"+j); ps.executeUpdate(); ps.close(); connect.close(); xtmp_orderDataProvider.refresh(); } catch(NamingException e) { e.printStackTrace(); } catch(SQLException e) { e.printStackTrace(); } } update_total(); setTxt(); return null; }
Je ne vois pas d'où peut provenir l'erreur.
J'ai déjà utiliser ce principe pour d'autres pages JSP et je n'ai jamais eu de problème. Je me demande si çà ne viendrait pas du fait que j'ai mis ma table dans un panelLayout...
Si quelqu'un aurait le courage de jeter un oeil sur le code (je sais c'est long, mais normalement y'a tout ce qui intervient dans le processus), je lui en serai très reconnaissant.
Merci d'avance
Nicolas
Partager