selectItems et conversion automatique
Bonjour,
je rencontre un problème de conversion assez gênant.
J'ai une datatable (rich:datatable) avec des filtres sur certaines colonnes :
Code:
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
| <rich:dataTable id="applicationsRegionaleDataTable"
binding="#{suiviApplicationsBackingBean.dataTable}"
value="#{suiviApplicationsBackingBean.rubriquesRegionales}"
var="varRubriqueRegionale"
width="100%"
rows="20"
rendered="#{not empty suiviApplicationsBackingBean.rubriquesRegionales}"
>
<f:facet name="header" >
<rich:columnGroup>
<rich:column>
<h:outputText value="Nom de l'outil" />
</rich:column>
<rich:column>
<h:outputText value="Région(s)" />
</rich:column>
<rich:column>
<h:outputText value="Domaine" />
</rich:column>
<rich:column>
<h:outputText value="Rubrique" />
</rich:column>
<rich:column>
<h:outputText value="Consultable" />
</rich:column>
<rich:column>
<h:outputText value="Type d'accès" />
</rich:column>
<rich:column>
<h:outputText value="Déploiement" />
</rich:column>
</rich:columnGroup>
</f:facet>
<rich:column>
<f:facet name="header">
</f:facet>
<h:outputText value="#{varRubriqueRegionale.application.libelle}"></h:outputText>
</rich:column>
<rich:column filterExpression="#{((suiviApplicationsBackingBean.filterRegion == null) || (suiviApplicationsBackingBean.filterRegion == '') || (varRubriqueRegionale.region.code==suiviApplicationsBackingBean.filterRegion))}">
<f:facet name="header">
<h:selectOneMenu value="#{suiviApplicationsBackingBean.filterRegion}" id="selectRegions">
<f:selectItems value="#{suiviApplicationsBackingBean.filterRegions}" />
<a4j:support event="onchange" reRender="rubriquesRegionaleDataTable, ds1" oncomplete="hideDiv()" onsubmit="showDiv()" />
</h:selectOneMenu>
</f:facet>
<h:outputText value="#{varRubriqueRegionale.region.libelle}"></h:outputText>
</rich:column>
<rich:column filterExpression="#{((suiviApplicationsBackingBean.filterDomaine == null) || (suiviApplicationsBackingBean.filterDomaine == '') || (varRubriqueRegionale.rubriqueDomaine.rubriqueId==suiviApplicationsBackingBean.filterDomaine))}">
<f:facet name="header">
<h:selectOneMenu value="#{suiviApplicationsBackingBean.filterDomaine}" id="selectDomaines">
<f:selectItems value="#{suiviApplicationsBackingBean.filterDomaines}" />
<a4j:support event="onchange" reRender="rubriquesRegionaleDataTable, ds1" oncomplete="hideDiv()" onsubmit="showDiv()" />
</h:selectOneMenu>
</f:facet>
<h:outputText value="#{varRubriqueRegionale.rubriqueDomaine.libelle}"></h:outputText>
</rich:column>
<rich:column style="text-align: center;">
<f:facet name="header">
</f:facet>
<h:outputText value="#{varRubriqueRegionale.chemin}"></h:outputText>
</rich:column>
<rich:column style="text-align: center;" filterExpression="#{(suiviApplicationsBackingBean.filterConsultable == null) || (suiviApplicationsBackingBean.filterConsultable == '') || (varRubriqueRegionale.consultable==suiviApplicationsBackingBean.filterConsultable)}" >
<f:facet name="header">
<h:selectOneMenu value="#{suiviApplicationsBackingBean.filterConsultable}" id="selectConsultable">
<f:selectItems value="#{suiviApplicationsBackingBean.filterConsultables}" />
<a4j:support event="onchange" reRender="rubriquesRegionaleDataTable, ds1" oncomplete="hideDiv()" onsubmit="showDiv()"/>
</h:selectOneMenu>
</f:facet>
<h:outputText value="#{varRubriqueRegionale.consultable}"></h:outputText>
</rich:column>
<rich:column style="text-align: center;" filterExpression="#{(suiviApplicationsBackingBean.filterTypeAcces == null) || (suiviApplicationsBackingBean.filterTypeAcces == '') || (varRubriqueRegionale.acces == suiviApplicationsBackingBean.filterTypeAcces)}" >
<f:facet name="header">
<h:selectOneMenu value="#{suiviApplicationsBackingBean.filterTypeAcces}" id="selecttypeAccess">
<f:selectItems value="#{suiviApplicationsBackingBean.filterTypeAccess}" />
<a4j:support event="onchange" reRender="rubriquesRegionaleDataTable, ds1" oncomplete="hideDiv()" onsubmit="showDiv()"/>
</h:selectOneMenu>
</f:facet>
<h:outputText value="#{varRubriqueRegionale.acces}" converter="fr.su.unv.asu.egeri.ihm.converter.TypeAccesConverter"></h:outputText>
</rich:column >
<rich:column style="text-align: center;" filterExpression="#{(suiviApplicationsBackingBean.filterDeploiement == null) || (suiviApplicationsBackingBean.filterDeploiement == '') || (varRubriqueRegionale.accesTotal == suiviApplicationsBackingBean.filterDeploiement)}" >
<f:facet name="header">
<h:selectOneMenu value="#{suiviApplicationsBackingBean.filterDeploiement}" id="selectDeploiement">
<f:selectItems value="#{suiviApplicationsBackingBean.filterDeploiements}" />
<a4j:support event="onchange" reRender="rubriquesRegionaleDataTable, ds1" oncomplete="hideDiv()" onsubmit="showDiv()"/>
</h:selectOneMenu>
</f:facet>
<h:outputText value="#{varRubriqueRegionale.magasinsAutorisesList}" converter="fr.su.unv.asu.egeri.ihm.converter.AccesListConverter"></h:outputText>
</rich:column>
</rich:dataTable> |
Le selectItems du select "selectConsultable" contient une liste de Boolean, initialisés ainsi :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| SelectItem selectItem = new SelectItem();
selectItem.setLabel("Tous");
selectItem.setValue(null);
filterConsultables.add(selectItem);
selectItem = new SelectItem();
selectItem.setLabel("oui");
selectItem.setValue(true);
filterConsultables.add(selectItem);
selectItem = new SelectItem();
selectItem.setLabel("non");
selectItem.setValue(false);
filterConsultables.add(selectItem); |
Au premier affichage du tableau tout va bien. Par contre si je change un filtre, par exemple je sélectionne une valeur sur le filtre selectRegions, lorsque je reviens sur ma page, l'item sélectionné dans le filtre "selectConsultable" est "non" (donc la valeur correspondant à false).
Le code HTML correspondant à la selectbox "selectConsultable" est le suivant :
Code:
1 2 3 4 5
| <SELECT id=subview_mainpanel:formsuiviApplications:applicationsRegionaleDataTable:selectConsultable onchange="showDiv();A4J.AJAX.Submit('j_id_jsp_1121791624_0','subview_mainpanel:formsuiviApplications',event,{'parameters':{'subview_mainpanel:formsuiviApplications:applicationsRegionaleDataTable:j_id_jsp_1038330611_48pc5':'subview_mainpanel:formsuiviApplications:applicationsRegionaleDataTable:j_id_jsp_1038330611_48pc5'} ,'actionUrl':'/egeri/egeri/index.jsf','oncomplete':function(request,event,data){hideDiv()}} )" size=1 name=subview_mainpanel:formsuiviApplications:applicationsRegionaleDataTable:selectConsultable>
<OPTION value="">Tous</OPTION>
<OPTION value=true>oui</OPTION>
<OPTION selected value=false>non</OPTION>
</SELECT> |
Au lieu de garder la valeur null, il affecte false à la valeur sélectionnée. Comme si il faisait une conversion automatique et que si la valeur est une chaine vide, il la met à false.
J'ai le même problème avec des Integer : si la valeur est celle défaut, il met 0 au lieu de laisser null.
Est-ce un comportement normal ? Est-il possible de lui préciser de ne pas faire de conversion ?