Bonjour,


Comme je ne suis pas certain que ma question soit la bonne, je pose le problème depuis le début :

je dispose dans une page un certain nombre de champs mappés dans un bean (scope request). Il y aussi dans cette page une table qui est remplie (une fois) à la suite d'une action (sélection via une modale et par un lien sur la même page).

Une fois que j'ai déclenché le remplissage de cette dataTable, je peux valider mon formulaire... mon problème est que la dataTable est vidée lors de l'action sur mon formulaire (en l’occurrence je m'en suis rendu compte la première fois que j'ai eu des erreurs de validation : la table était vide, alors que les autres champs étaient bien maintenus en l'état)

je suppose que celà vient du fait que la liste (List<Coupons> coupons) mappée dans monBean est d'une taille variable et donc qu'au moment de mettre à jour le modèle j'essaie en fait de le faire sur une Liste vide, et donc qu'il n'existe pas en fait de Liste à mettre à jour avec les propriétés de ma datatable...

J'ai donc mis en session la taille de cette table au moment où je la génère
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
        sessionMap.put(SELECTED_COUPONS_SIZE, coupons.size());
que je récupère ensuite à l'init du Bean pour reconstruire une liste de la bonne taille et avec les mêmes ids :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
       coupons = new ArrayList<Coupon>();
        final Map<String, Object> sessionMap = FacesContext.getCurrentInstance().getExternalContext().getSessionMap();
        final Integer size = (Integer) sessionMap.get(SELECTED_COUPONS_SIZE);
        if (size > 0) {
            for (int i = 0 ; i < size ; i++) {
                final Coupon coupon = new Coupon();
                coupon.setId(i);
                coupons.add(coupon);
            }
        }
Malheureusement, rien n'y fait... après avoir provoqué des erreurs de validation pour être sûr de voir le résultat de l'affichage, je constate que ma table est cette fois remplie avec une table de coupons... vierges! Les données précédemment générées ont été effacées...

Me voilà donc face à un os... si quelqu'un a une piste, je lui en serai éternellement reconnaissant!

D'ici là, bon week end à vous!

PS:

j'ai pris ici l'exemple d'une gestion de coupons pour faire ma démonstration

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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
<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">
 
 
<a4j:region id="modalRegion">
  <!-- Selection des coupons -->
  <rich:modalPanel
    id="selectCouponsPanel"
    minWidth="450"
    autosized="true">
    <ui:include src="selectCouponsPanel.xhtml" />
  </rich:modalPanel>
</a4j:region>
 
<!-- ************************* -->
<!-- ******* TITLE *********** -->
<!-- ************************* -->
  <h:form id="frmNewDiscountCoupon"
    styleClass="css">
    <div class="title">
      <h2><h:outputText value="TITRE" /></h2>
    </div>
 
 
    <!-- ************************* -->
    <!-- ****** INPUT FORM ******* -->
    <!-- ************************* -->
    <a4j:outputPanel>
    <fieldset>
      <p class="message">
        <label> 
          <h:outputText value="Promotion" /> 
        </label> 
        <h:inputText
          id="libelle_promotion"
          label="libelle_promotion"
          value="#{monBean.promotion.name}"
          class="textfield"
          required="true" /> 
        <a4j:outputPanel styleClass="statusError float-right">
          <h:message id="libeleError" for="libellepromotion" style="color:red;" />
        </a4j:outputPanel>
      </p>
    </fieldset>
    <fieldset><!-- + deux trois autres champs--></fieldset>
    <div class="button-wrapper">
      <a4j:commandLink 
        onclick="#{rich:component('selectCouponsPanel')}.show();">
        <span> 
          <h:outputText value="sélectionner une liste de coupons" /> 
        </span>
      </a4j:commandLink> 
    </div>
    <br/>
    <br/>
    <br/>
 
    <!-- ************************************* -->
    <!-- ******* GENERATED "COUPONS" ********* -->
    <!-- ************************************* -->
    <rich:extendedDataTable
      id="table"
      value="#{monBean.coupons}"
      var="coupon"
      rowKeyVar="row"
      height="200px"
      width="430px"
      rows="#{monBean.couponsSize}"
      captionClass="captiontitle"
      rendered="#{monBean.couponsSize>0}" >
      <f:facet name="caption">
        <h:outputText value="COUPONS" />
      </f:facet>
 
      <rich:column width="80">
        <f:facet name="header">
          <h:outputText value="Numéro" />
        </f:facet>
        <h:outputText
        value="#{coupon.id}"/>
      </rich:column>
 
      <rich:column width="260">
        <f:facet name="header">
          <h:outputText value="Code" />
        </f:facet>
        <h:outputText
        value="#{coupon.code}"/>
      </rich:column>
    </rich:extendedDataTable>
 
    <br/>
 
    <!-- ************************************* -->
    <!-- ******* SAVE (AND SEND) ************* -->
    <!-- ************************************* -->
    <div class="button-wrapper">
      <h:commandLink action="#{monbean.doGenerateAndSend}">
        <span> 
        <h:outputText styleClass="button" value="Générer" /> 
        </span>
      </h:commandLink>
    </div>
    </a4j:outputPanel>
  </h:form>
</f:view>