Bonjour,
je suis un débutant en JSF / Beans et même javascript... et comme j'utilise un peu de tout ça, mon problème pourrait être fort stupide (et surtout mal formulé : ce qui explique l'échec de mes recherches pour trouver un problème similaire existant et résolu).
Mais dans l'impasse, je préfère avoir l'air bête 5 minutes, donc allons-y:
je dispose d'une datatable qui a pour valeur une table mappée avec son équivalent dans un bean (scope = request).
Depuis cette table, j'exécute une commande qui me permet de supprimer l'ensemble des lignes sélectionnées (au moyen de checkboxs). Afin d'éviter les bourdes, j'émets un formulaire (modal) de validation, et si le "oui" est cliqué, j'appelle la méthode doDeleteAllSelected() de mon bean...
Le problème est que le formulaire modal de validation n'a plus les informations mises à jour de mes lignes (checkbox toutes à "false" à la place). Si à la place je fais l'appel à la fonction de doDeleteAllSelected() directement depuis le formulaire dans lequel est la datatable, ça fonctionne bien..
J'ai donc deux options :
- j'arrive à transmettre l'état de mes lignes à l'intérieur du formulaire modal de validation
- je trouve le moyen d'obtenir une valeur de retour de mon formulaire ("yes" ou "no") et j'exécute la méthode doDeleteAllSelected() en conséquence...
Seulement, je ne sais comment faire ni l'un ni l'autre... donc, si vous avez des idées...
Dans tous les cas, merci de m'avoir au moins lu jusque là!
PS : (le scope ne peut pas changer, donc rendre le bean persistant n'est malheureusement pas une solution)
la datatable (à l'intérieur de mon formulaire principal)
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 <rich:dataTable value="#{Data.allDatas}" var="varData" rowKeyVar="row" rows="30" id="tableData" columns="9" columnsWidth="2%,13%,14%,3%,5%,13%,23%,10%,13%" styleClass="default" captionClass="captiontitle" columnClasses="novisible, selected, field1, field2, field3, field4, field5, field6, field7, field8"> <f:facet name="caption"> <h:panelGroup > <h:outputText value="#{bundle.Data_form_list}" /> <h:outputText value="#{bundle.Data_form_escape_caracter}" escape=""/> <a4j:commandLink ajaxSingle="false" id="deleteAllSelected" oncomplete="#{rich:component('deleteSelectedDatasPanel')}.show();" styleClass="btn-action delete" title="#{bundle.Data_form_tooltip_multi_delete}" status="DataRegion"> <f:setPropertyActionListener value="false" target="#{Data.isAllSelected}" /> </a4j:commandLink> </h:panelGroup> </f:facet> <rich:column width="0%" visible="false"> <f:facet name="header"> <h:outputText value="#{bundle.Data_form_id}" /> </f:facet> <h:outputText value="#{varData.id}" id="DataId" /> </rich:column> <rich:column id ="SelectColumn" style="text-align:left"> <f:facet name="header" id ="SelectColumnHeader"> <h:panelGroup id ="SelectColumnHeaderGroup"> <h:selectBooleanCheckbox id="ToggleSelection" value="#{Data.isAllSelected}" onclick="toggleSelectAllRows(this)"> </h:selectBooleanCheckbox> </h:panelGroup> </f:facet> <h:selectBooleanCheckbox id="checkIt" value="#{varData.selected}" onclick="toggleSelectAllCheckBox(this)"> </h:selectBooleanCheckbox> </rich:column>
Le formulaire modal
et le Bean:
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 <f:view...> <div id="modal-wrapper"> <h2 class="title"> <h:outputText value="#{bundle.Data_delete_multi_title}"/> </h2> <div class="modal-content"> <h:outputText value="#{bundle.Data_delete_multi_confirm}" escape="false"/> <h:form> <a4j:outputPanel ajaxRendered="true"> <h:inputHidden value="#{Data.currentItem.id}"/> <div class="button-wrapper"> <br/> <a4j:commandLink styleClass="button btn-blue" onclick="#{rich:component('deleteSelectedDatasPanel')}.hide();" immediate="true"> <span> <h:outputText value="#{bundle.Data_form_bt_no}"/> </span> </a4j:commandLink> <a4j:commandLink styleClass="button" action="#{Data.doDeleteSelectedDatas}" reRender="tableData, multiDataTable, emptyPhoneDataTable" oncomplete="#{rich:component('deleteSelectedDatasPanel')}.hide();"> <span> <h:outputText value="#{bundle.Data_form_bt_yes}"/> </span> </a4j:commandLink> </div> </a4j:outputPanel> </h:form> </div> </div> </f:view>
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 /** * Delete all selected Data. */ public String doDeleteSelectedDatas() { try { for (SelectableData Data : allDatas){ if(Data.isSelected()) DataService.deleteData(Data.getId()); } } catch (Exception e) { logger.error("Error while deleting the Data.", e); } return OUTCOME_VIEW_Data; }
Partager