Bonjour,

il s'agit pour moi de réaliser un certain nombre d'opérations dans une modale (une sélection pour être précis), puis de la fermer à l'issue de ces opérations.
Dans la page appelante, l'utilisateur peut alors déclencher une action qui prendra en compte les données préalablement sélectionnées dans cette modale.

Le Hic est que lors de l'appel de mon action, les valeurs des propriétés de cette modale (cachée) ne sont pas mises à jour dans mon bean avant l'appel de l'action déclenchée : elles ne sont donc pas prises en compte.
Par contre elles sont bien mises à jour dès que je raffiche la modale.

Je ne peux pas non plus maintenir en état visible la modale car les données à sélectionner y sont trop nombreuses.

Je me heurte donc à un problème de conception...

Les pistes que j'ai envisagées sont :
  • Placer dans la session la liste des Ids de mes objets sélectionnés lorsque je ferme la modale
  • utiliser un h:inputHidden .... mais là, je ne sais pas vraiment comment m'y prendre (déjà il me semble qu'il faudra mettre en place un converter pour mes données non primitives)
  • Forcer la récupération des valeurs de l'objet... malheureusement ça ne fonctionne pas (==null) de la façon dont je m'y suis pris
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        public final String doMonAction() {
            final Object value = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("maTableDeSelectionsModale");
            // ... 
            }
  • Utiliser une astuce visuelle?...


Je n'ai pas testé la première idée, principalement parceque pour l'instant je fais de la résistance à l'idée de mettre qqchose en session (mon bean est en scope request). Il est évident que si c'est la seule chose à faire, je m'empresserai de choisir cette solution (celle-là est la seule que je sais mettre en oeuvre, en fait). Mais si une solution plus légère existe, je la prend plus volontiers!

Donc si quelqu'un a une suggestion... je la recevrai avec plaisir!

Ma modale :
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
<f:view xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:a4j="http://richfaces.org/a4j"
xmlns:t="http://myfaces.apache.org/tomahawk"
xmlns:rich="http://richfaces.org/rich"
xmlns:s="http://jboss.com/products/seam/taglib" 
contentType="text/html">
 
  <h:form id="myForm"
    styleClass="css">
    <div class="title">
    <h2><h:outputText value="TITRE" /></h2>
    </div>
 
    <rich:extendedDataTable
      id="maTable"
      value="#{monBean.usersList}"
      var="user"
      width="600px" height ="330px"
      rows="#{monBean.usersListSize}">
      <f:facet name="caption">
        <h:outputText value="CAPTION" />
      </f:facet>
      <f:facet name="header">
        <h:panelGroup>
          <div class="float-left" style="margin:0; padding: 0;">
            <h:selectBooleanCheckbox id="ToggleSelection"
              styleClass="select-all"
              onclick="toggleSelectAllRows(this)">
            </h:selectBooleanCheckbox>
          </div>
        </h:panelGroup>
      </f:facet>
 
      <rich:column width="30"
        id ="SelectColumn"
        style="text-align:left;vertical-align: bottom;"> 
        <f:facet name="header">
          <h:outputText value="" />
        </f:facet>
        <h:selectBooleanCheckbox id="checkIt"
          value="#{user.selected}">
        </h:selectBooleanCheckbox>
      </rich:column>
 
      <rich:column width="120"
        style="text-align:left;padding-left:10px;">
        <f:facet name="header">
          <h:outputText value="Last Name" />
        </f:facet>
        <h:outputText
          value="#{user.lastname}" />
      </rich:column>
 
      <rich:column  width="220"
        style="text-align:left;padding-left:10px;">
        <f:facet name="header">
          <h:outputText value="Company" />
        </f:facet>
        <h:outputText
          value="#{user.company}" />
      </rich:column>
    </rich:extendedDataTable>
  </h:form>
</f:view>
L'appel dans ma page appelante:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
<div class="button-wrapper">
  <a4j:commandLink
    onclick="#{rich:component('selectUsers')}.show();">
    <span> 
      <h:outputText value="Sélectionner les utilisateurs" /> 
    </span>
  </a4j:commandLink> 
  <a4j:commandLink action="#{monbean.doMonAction}">
    <span> 
      <h:outputText value="Action!" /> 
    </span>
  </a4j:commandLink>
</div>
Et dans le bean : (en plus de l'action citée plus haut)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
/**
     * The list of users
     */
    private List<User>        usersList; // + getter/setter/init