IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JSF Java Discussion :

Converter: getAsObject n'est pas appellée


Sujet :

JSF Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 34
    Points : 11
    Points
    11
    Par défaut Converter: getAsObject n'est pas appellée
    Bonjour,

    J'avance dans ma découverte de JSF et je viens de tomber sur le cas suivant:

    J'affiche dans un formulaire un selectManyCheckbox:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <h:selectManyCheckbox value="#{zone.zonesVues}" converter="javax.faces.Zone" >
    	    					<f:selectItems value="#{zoneBean.toutesLesZones}"/>
    	    				</h:selectManyCheckbox>
    qui contient exactement ce qui existe en base (affichage OK).

    Comme vous pouvez le voir, celui-ci est lié à un converter (correctement défini dans le faces-config puisque getAsString est bien appellé).

    Lorsque je valide mon formulaire, j'obtiens l'erreur suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Erreur de conversion quand la valeur '344@RAC@Racines@394@serv2@host2@2@true' est commise pour le modéle '#{zone.zonesVues}' : Exception: {2}.
    De plus, je ne passe jamais dans la fonction qui est lié au submit du formulaire ni dans getAsObject du formulaire...

    Auriez-vous une solution, une idée ou des infos sur le problème ?

  2. #2
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Points : 5 059
    Points
    5 059
    Par défaut
    comment, le code converter n'est pas appelé alors que tu as une erreur de conversion..
    tu définis bien le label et value des selectItems?

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 34
    Points : 11
    Points
    11
    Par défaut
    Mon selectItems est remplis comme ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    List<Zone> lz = RessourceDelegate.getAllZones();
    			this.toutesLesZones = new ArrayList<SelectItem>();
    			for(Zone z : lz){
    				this.toutesLesZones.add(new SelectItem(z,z.getLibelleZone()));
    			}
    Et, lorsque je fait un debug, elle est bien rempli avec les valeurs voulues...

    Par contre, je confirme que je ne passe ni dans le getAsObject ni dans la fonction liée à la validation du formulaire...

  4. #4
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Points : 5 059
    Points
    5 059
    Par défaut
    tu es sur que le code du converter n'est pas exécuté quand tu envoi le formulaire?

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 34
    Points : 11
    Points
    11
    Par défaut
    Mon code getAsObject:

    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
    public Object getAsObject(FacesContext arg0, UIComponent arg1, String arg2) {
    		System.out.println("getAsObject : " + arg2);
    		Zone zone;
    		try {
    			zone = new Zone();
    			String[] params = arg2.split("@");
    			zone.setIdZone(Long.parseLong(params[0]));
    			zone.setAlias(params[1]);
    			zone.setLibelleZone(params[2]);
    			Serveur s = new Serveur();
    			s.setIdServeur(Long.parseLong(params[3]));
    			s.setLibelleServeur(params[4]);
    			s.setHostname(params[5]);
    			s.setPort(Integer.parseInt(params[6]));
    			s.setExisteCT(Boolean.parseBoolean(params[7]));
    			zone.setServeur(s);
    		} catch (Exception e) {
    			 FacesMessage facesMessage = new FacesMessage();
                 facesMessage.setSeverity(FacesMessage.SEVERITY_ERROR);
                 facesMessage.setSummary("Format incorrect");
                 facesMessage.setDetail("Le format reçu ne permet pas de transformer un String en Zone.");
                 throw new ConverterException(facesMessage);
    		}
    		return zone;
    	}
    public String getAsString(FacesContext arg0, UIComponent arg1, Object arg2) {
    		System.out.println("getAsString : " + arg2);
    		if(arg2 instanceof String){
    			return (String) arg2;
    		}else{
    			return ((Zone)arg2).toString();
    		}
    	}
    J'ai des points de debug partout et le System.out ne passerait pas innaperçut (je vois bien ceux du getAsString) ;p

    Il me squizze donc cette étape et m'affiche directement le message d'erreur précédant...

  6. #6
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Points : 5 059
    Points
    5 059
    Par défaut
    tu n'a pas d'erreur de validation?

    donne quoi ??

    et c'est quoi la trace complète de l'exception?

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 34
    Points : 11
    Points
    11
    Par défaut
    J'ai déjà mis la trace complète de l'erreur reçue.
    Je te met une copie d'écran ;p
    Images attachées Images attachées  

  8. #8
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Points : 5 059
    Points
    5 059
    Par défaut
    et dans la console tu n'a rien??

  9. #9
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    dans la source générée, tes checkbox ressemblent à quoi?

    Si en plus du throw, tu rajoute un FacesContext.getCurrentInstance.addMessage(nul,message), on y vois plus clair?


    Je pose la question parce que que, visiblement, la cause de l'erreur (l'exception) n'est pas loggué dans ta page (y a un {2} à la place :s)

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 34
    Points : 11
    Points
    11
    Par défaut
    Dans la console, je n'ai que les appels à getAsString (juste après que j'essaie de valider une ligne):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    09:06:35,953 INFO  [STDOUT] getAsString : 345@AGR@Agriates@393@serv1@host1@1@true
    09:06:35,953 INFO  [STDOUT] getAsString : 344@RAC@Racines@394@serv2@host2@2@true
    09:06:35,968 INFO  [STDOUT] getAsString : 345@AGR@Agriates@393@serv1@host1@1@true
    09:06:35,968 INFO  [STDOUT] getAsString : 344@RAC@Racines@394@serv2@host2@2@true
    Un exemple de checkbox généré (pour la ligne où une seule case est checked):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <tr>
    <td>
    <input name="formZones:tableZone:1:j_id41" id="formZones:tableZone:1:j_id41:0" value="345@AGR@Agriates@393@serv1@host1@1@true" type="checkbox" /><label for="formZones:tableZone:1:j_id41:0"> Agriates</label></td>
     
    <td>
    <input name="formZones:tableZone:1:j_id41" id="formZones:tableZone:1:j_id41:1" value="344@RAC@Racines@394@serv2@host2@2@true" type="checkbox" checked="checked" /><label for="formZones:tableZone:1:j_id41:1"> Racines</label></td>
    	</tr>
    Edit: Tu veux que j'ajoute le throw où ? Je ne passe ni dans la fonction de validation de la ligne ni dans mon getAsObject...
    D'autre aprt, au premier affichage, tout est nickel.

  11. #11
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Points : 5 059
    Points
    5 059
    Par défaut
    tu peux montrer le code de la page?

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 34
    Points : 11
    Points
    11
    Par défaut
    Ma page zones.xhtml:

    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
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml"
          xmlns:h="http://java.sun.com/jsf/html"
          xmlns:f="http://java.sun.com/jsf/core"
          xmlns:ui="http://java.sun.com/jsf/facelets"
          xmlns:a4j="http://richfaces.org/a4j"
    	  xmlns:rich="http://richfaces.org/rich">
     
    	<ui:composition template="/templates/commun.xhtml">
     
    		<ui:define name="body">
     
    			<h:form id="formZones">
    				<p><h:commandLink action="retourAccueil" styleClass="retourAccueil" value="#{msg.retourAccueil}" immediate="true" /></p>
    	    		<h1><h:outputText value="#{msg.zonesTitre}" /></h1>
     
    	    		<p><h:outputText styleClass="premierCaption" value="Liste des zones existantes : " />
    	    		<h:commandLink action="#{zoneBean.creerZone}" >
    	    			<h:graphicImage value="../images/creer.jpg" width="17" height="17" title="Création Zone" />
    	    		</h:commandLink></p>
     
    	    		<h:messages errorClass="erreur" showDetail="true" showSummary="false"/>
     
    	    		<rich:dataTable id="tableZone" cellpadding="0" cellspacing="0" 
                        width="700" border="0" var="zone" value="#{zoneBean.zones}"
                        rowClasses="fondBlanc,fondCouleur">
     
    	    			<f:facet name="header">
                            <rich:columnGroup styleClass="fondCouleur">
                                <rich:column breakBefore="true" width="1%"><h:outputText value="Alias" /></rich:column>
                                <rich:column width="1%"><h:outputText value="Libellé" /></rich:column>
                                <rich:column width="1%">
                                	<h:outputText value="Id Serveur " />
                                	<h:commandLink action="#{zoneBean.synchroniserServeurs}" >
    					    			<h:graphicImage value="../images/synchro.jpg" width="17" height="17" title="Synchroniser les serveurs" />
    					    		</h:commandLink>
                                </rich:column>
                                <rich:column width="1%"><h:outputText value="Vues" /></rich:column>
                                <rich:column width="1%"><rich:spacer width="17" height="10"/></rich:column>
                                <rich:column width="1%"><rich:spacer width="17" height="10"/></rich:column>
                            </rich:columnGroup>
                        </f:facet>
     
    	    			<rich:column colspan="1">
    	    				<h:inputText styleClass="sansBord" size="5" value="#{zone.alias}"/>
    	    			</rich:column>
     
    	    			<rich:column colspan="1">
    	    				<h:inputText styleClass="sansBord" size="8" value="#{zone.libelleZone}"/>
    	    			</rich:column>
     
    	    			<rich:column id="idColSelect" colspan="1">
    	    				<h:selectOneMenu id="selectServeurId" styleClass="sansBord" value="#{zone.serveur.idServeur}"
    	    				immediate="true" >
    	    					<f:selectItems value="#{zoneBean.tousLesServeurs}"/>
    	    				</h:selectOneMenu>
    	    			</rich:column>
     
    	    			<rich:column colspan="1">
    	    				<h:selectManyCheckbox value="#{zone.zonesVues}" converter="javax.faces.Zone" immediate="true"  >
    	    					<f:selectItems value="#{zoneBean.toutesLesZones}"/>
    	    				</h:selectManyCheckbox>
    	    			</rich:column>
     
    	    			<rich:column colspan="1">
    	    				<h:commandLink action="#{zoneBean.processSauvZone}" >
    	    					<h:graphicImage value="../images/valider.jpg" width="17" height="17" title="Valider les modifications" />
    	    						<f:setPropertyActionListener value="#{zone}" target="#{zoneBean.zoneToSave}" />
    	    				</h:commandLink>
    	    			</rich:column>
     
    	    			<rich:column colspan="1">
    	    				<h:commandLink action="#{zoneBean.traiterSuppression}" >
    	    					<h:graphicImage value="../images/poubelle.jpg" width="17" height="17" title="Supprimer" />
    	    				</h:commandLink>
    	    			</rich:column>
     
    	    		</rich:dataTable>
     
        		</h:form>
     
    		</ui:define>
     
    	</ui:composition>
     
    </html>
    Le rendu html apres la validation:

    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
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >
    <html xmlns="http://www.w3.org/1999/xhtml">
     
    <head>
    <script src="/InterfaceAdmin/a4j/g/3_3_0.GA/org/ajax4jsf/framework.pack.js.jsf" type="text/javascript"></script><script src="/InterfaceAdmin/a4j/g/3_3_0.GA/org/richfaces/ui.pack.js.jsf" type="text/javascript"></script><link class="component" href="/InterfaceAdmin/a4j/s/3_3_0.GAorg/richfaces/renderkit/html/css/basic_classes.xcss/DATB/eAF7sqpgb-jyGdIAFrMEaw__.jsf" rel="stylesheet" type="text/css" /><link class="component" href="/InterfaceAdmin/a4j/s/3_3_0.GAorg/richfaces/renderkit/html/css/extended_classes.xcss/DATB/eAF7sqpgb-jyGdIAFrMEaw__.jsf" media="rich-extended-skinning" rel="stylesheet" type="text/css" /><link class="component" href="/InterfaceAdmin/a4j/s/3_3_0.GAcss/table.xcss/DATB/eAF7sqpgb-jyGdIAFrMEaw__.jsf" rel="stylesheet" type="text/css" /><script type="text/javascript">window.RICH_FACES_EXTENDED_SKINNING_ON=true;</script><meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     
    <title>InterfaceAdm</title>
     
    <link href="../style/men_portail.css" rel="stylesheet" type="text/css" />
     
    <style type="text/css">
    	h1{margin-top: 20px;font-size: 1.5em;}
    	h2 {font-size: 1.3em;}
    </style>
    </head>
     
    <body class="bandeau_large">
     
    <div id="container">
    	<!-- InstanceBeginEditable name="boutons" -->
    	<div id="boutons">
    	  <input name="portail" type="button" class="bouton" id="portail" value="portail" onclick="location.href='./accueil.jsf'" />
    	  <input name="deconnexion" type="button" class="bouton" id="deconnexion" value="d&eacute;connexion" onclick="location.href='./accueil.jsf'" />
        </div>
    <!-- InstanceEndEditable -->
        <!-- InstanceBeginEditable name="titre" -->
    	<div id="titre">Interface ADM </div>
     
    	<!-- InstanceEndEditable -->
        <div class="cleaner"></div>
        <!-- InstanceBeginEditable name="id" -->
    	<div id="profil"> 
    		<div class="connexion"></div>
    		<div class="nom"></div>
    		<div class="cleaner"></div>
    	</div>
    	<div id="portail">
     
    <form id="formZones" name="formZones" method="post" action="/InterfaceAdmin/pages/zones.jsf" enctype="application/x-www-form-urlencoded">
    <input type="hidden" name="formZones" value="formZones" />
     
    				<p>
    <script type="text/javascript" language="Javascript">function dpf(f) {var adp = f.adp;if (adp != null) {for (var i = 0;i < adp.length;i++) {f.removeChild(adp[i]);}}};function apf(f, pvp) {var adp = new Array();f.adp = adp;var ps = pvp.split(',');for (var i = 0,ii = 0;i < ps.length;i++,ii++) {var p = document.createElement("input");p.type = "hidden";p.name = ps[i];p.value = ps[i + 1];f.appendChild(p);adp[ii] = p;i += 1;}};function jsfcljs(f, pvp, t) {apf(f, pvp);var ft = f.target;if (t) {f.target = t;}f.submit();f.target = ft;dpf(f);};</script>
    <a href="#" onclick="if(typeof jsfcljs == 'function'){jsfcljs(document.getElementById('formZones'),'formZones:j_id11,formZones:j_id11','');}return false" class="retourAccueil">Retour Accueil</a></p>
    	    		<h1>Gestion des Zones</h1>
     
    	    		<p><span class="premierCaption">Liste des zones existantes : </span><a href="#" onclick="if(typeof jsfcljs == 'function'){jsfcljs(document.getElementById('formZones'),'formZones:j_id16,formZones:j_id16','');}return false"><img src="../images/creer.jpg" height="17" title="Cr&eacute;ation Zone" width="17" /></a></p><ul><li class="erreur">Erreur de conversion quand la valeur '345@AGR@Agriates@393@serv1@host1@1@true 344@RAC@Racines@394@serv2@host2@2@true' est commise pour le mod&eacute;le '#{zone.zonesVues}' : Exception: {2}.</li><li class="erreur">Erreur de conversion quand la valeur '344@RAC@Racines@394@serv2@host2@2@true' est commise pour le mod&eacute;le '#{zone.zonesVues}' : Exception: {2}.</li></ul><table class="dr-table rich-table " id="formZones:tableZone" border="0" cellpadding="0" cellspacing="0" width="700"><colgroup span="6"></colgroup><thead class="dr-table-thead"><tr class="dr-table-header rich-table-header  fondCouleur"><th class="dr-table-headercell rich-table-headercell " id="formZones:tableZone:j_id67" width="1%">Alias</th><th class="dr-table-headercell rich-table-headercell " id="formZones:tableZone:j_id69" width="1%">Libell&eacute;</th><th class="dr-table-headercell rich-table-headercell " id="formZones:tableZone:j_id71" width="1%">Id Serveur <a href="#" onclick="if(typeof jsfcljs == 'function'){jsfcljs(document.getElementById('formZones'),'formZones:tableZone:j_id73,formZones:tableZone:j_id73','');}return false"><img src="../images/synchro.jpg" height="17" title="Synchroniser les serveurs" width="17" /></a></th><th class="dr-table-headercell rich-table-headercell " id="formZones:tableZone:j_id75" width="1%">Vues</th><th class="dr-table-headercell rich-table-headercell " id="formZones:tableZone:j_id77" width="1%"><img alt="" class="rich-spacer " height="10" id="formZones:tableZone:j_id78" src="/InterfaceAdmin/a4j/g/3_3_0.GAimages/spacer.gif.jsf" width="17" /></th><th class="dr-table-headercell rich-table-headercell " id="formZones:tableZone:j_id79" width="1%"><img alt="" class="rich-spacer " height="10" id="formZones:tableZone:j_id80" src="/InterfaceAdmin/a4j/g/3_3_0.GAimages/spacer.gif.jsf" width="17" /></th></tr></thead><tbody id="formZones:tableZone:tb"><tr class="dr-table-firstrow rich-table-firstrow fondBlanc"><td class="dr-table-cell rich-table-cell " id="formZones:tableZone:0:j_id35" colspan="1"><input type="text" name="formZones:tableZone:0:j_id36" value="AGR" class="sansBord" size="5" /></td><td class="dr-table-cell rich-table-cell " id="formZones:tableZone:0:j_id37" colspan="1"><input type="text" name="formZones:tableZone:0:j_id38" value="Agriates" class="sansBord" size="8" /></td><td class="dr-table-cell rich-table-cell " id="formZones:tableZone:0:idColSelect" colspan="1"><select id="formZones:tableZone:0:selectServeurId" name="formZones:tableZone:0:selectServeurId" class="sansBord" size="1">	<option value="393" selected="selected">serv1</option>
     
    	<option value="394">serv2</option>
    	<option value="401">serv3</option>
    </select></td><td class="dr-table-cell rich-table-cell " id="formZones:tableZone:0:j_id40" colspan="1"><table>
    	<tr>
    <td>
    <input name="formZones:tableZone:0:j_id41" id="formZones:tableZone:0:j_id41:0" value="345@AGR@Agriates@393@serv1@host1@1@true" type="checkbox" checked="checked" /><label for="formZones:tableZone:0:j_id41:0"> Agriates</label></td>
    <td>
    <input name="formZones:tableZone:0:j_id41" id="formZones:tableZone:0:j_id41:1" value="344@RAC@Racines@394@serv2@host2@2@true" type="checkbox" checked="checked" /><label for="formZones:tableZone:0:j_id41:1"> Racines</label></td>
     
    	</tr>
    </table></td><td class="dr-table-cell rich-table-cell " id="formZones:tableZone:0:j_id43" colspan="1"><a href="#" onclick="if(typeof jsfcljs == 'function'){jsfcljs(document.getElementById('formZones'),'formZones:tableZone:0:j_id44,formZones:tableZone:0:j_id44','');}return false"><img src="../images/valider.jpg" height="17" title="Valider les modifications" width="17" /></a></td><td class="dr-table-cell rich-table-cell " id="formZones:tableZone:0:j_id46" colspan="1"><a href="#" onclick="if(typeof jsfcljs == 'function'){jsfcljs(document.getElementById('formZones'),'formZones:tableZone:0:j_id47,formZones:tableZone:0:j_id47','');}return false"><img src="../images/poubelle.jpg" height="17" title="Supprimer" width="17" /></a></td></tr><tr class="dr-table-firstrow rich-table-firstrow fondCouleur"><td class="dr-table-cell rich-table-cell " id="formZones:tableZone:1:j_id35" colspan="1"><input type="text" name="formZones:tableZone:1:j_id36" value="RAC" class="sansBord" size="5" /></td><td class="dr-table-cell rich-table-cell " id="formZones:tableZone:1:j_id37" colspan="1"><input type="text" name="formZones:tableZone:1:j_id38" value="Racines" class="sansBord" size="8" /></td><td class="dr-table-cell rich-table-cell " id="formZones:tableZone:1:idColSelect" colspan="1"><select id="formZones:tableZone:1:selectServeurId" name="formZones:tableZone:1:selectServeurId" class="sansBord" size="1">	<option value="393">serv1</option>
    	<option value="394" selected="selected">serv2</option>
    	<option value="401">serv3</option>
    </select></td><td class="dr-table-cell rich-table-cell " id="formZones:tableZone:1:j_id40" colspan="1"><table>
    	<tr>
    <td>
    <input name="formZones:tableZone:1:j_id41" id="formZones:tableZone:1:j_id41:0" value="345@AGR@Agriates@393@serv1@host1@1@true" type="checkbox" /><label for="formZones:tableZone:1:j_id41:0"> Agriates</label></td>
     
    <td>
    <input name="formZones:tableZone:1:j_id41" id="formZones:tableZone:1:j_id41:1" value="344@RAC@Racines@394@serv2@host2@2@true" type="checkbox" checked="checked" /><label for="formZones:tableZone:1:j_id41:1"> Racines</label></td>
    	</tr>
    </table></td><td class="dr-table-cell rich-table-cell " id="formZones:tableZone:1:j_id43" colspan="1"><a href="#" onclick="if(typeof jsfcljs == 'function'){jsfcljs(document.getElementById('formZones'),'formZones:tableZone:1:j_id44,formZones:tableZone:1:j_id44','');}return false"><img src="../images/valider.jpg" height="17" title="Valider les modifications" width="17" /></a></td><td class="dr-table-cell rich-table-cell " id="formZones:tableZone:1:j_id46" colspan="1"><a href="#" onclick="if(typeof jsfcljs == 'function'){jsfcljs(document.getElementById('formZones'),'formZones:tableZone:1:j_id47,formZones:tableZone:1:j_id47','');}return false"><img src="../images/poubelle.jpg" height="17" title="Supprimer" width="17" /></a></td></tr></tbody></table><input type="hidden" name="javax.faces.ViewState" id="javax.faces.ViewState" value="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" />
    </form>
        	<div id="footer"> SIGAT - Interface d'Administration Identit&eacute; v.1.0 - JJ/MM/AAAA</div>
    	</div>
    </div>
     
    <div class="cleaner"></div>
    </body>
    </html>
    Et mon 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
    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
     
    public class ZoneBBean {
     
    	private static String NEW_ZONE = "New";
     
    	private List<Zone> zones;
    	private List<SelectItem> tousLesServeurs;
    	private List<SelectItem> toutesLesZones;
    	private Zone zoneToSave;
     
    	public ZoneBBean() {
    	}
     
    	public List<Zone> getZones() {
    		return zones;
    	}
     
    	public void setZones(List<Zone> zones) {
    		this.zones = zones;
    	}
     
    	public List<SelectItem> getTousLesServeurs() {
    		return tousLesServeurs;
    	}
     
    	public void setTousLesServeurs(List<SelectItem> tousLesServeurs) {
    		this.tousLesServeurs = tousLesServeurs;
    	}
     
    	public Zone getZoneToSave() {
    		return zoneToSave;
    	}
     
    	public void setZoneToSave(Zone zoneToSave) {
    		this.zoneToSave = zoneToSave;
    	}
     
    	public List<SelectItem> getToutesLesZones() {
    		return toutesLesZones;
    	}
     
    	public void setToutesLesZones(List<SelectItem> toutesLesZones) {
    		this.toutesLesZones = toutesLesZones;
    	}
     
    	public String initZones(){
    		try {
    			List<Serveur> l = RessourceDelegate.getAllServeurs();
    			this.tousLesServeurs = new ArrayList<SelectItem>();
    			for(Serveur s : l){
    				this.tousLesServeurs.add(new SelectItem(s.getIdServeur(),s.getLibelleServeur()));
    			}
    			List<Zone> lz = RessourceDelegate.getAllZones();
    			this.toutesLesZones = new ArrayList<SelectItem>();
    			for(Zone z : lz){
    				this.toutesLesZones.add(new SelectItem(z,z.getLibelleZone()));
    			}
    			classementZones();
    		} catch (Exception e) {
    			return "retourAccueil";
    		}
    		return "h1ConfigurationZone";
    	}
     
    	public void classementZones(){
    		List<Zone> lz = RessourceDelegate.getAllZones();
    		this.zones = new ArrayList<Zone>();
    		//Les anciennes zones avant + le selectItems remplis entièrement
    		for(Zone z : lz){
    			if(!z.getLibelleZone().equals(NEW_ZONE)){
    				z = RessourceDelegate.getZone(z.getIdZone());
    				this.zones.add(z);
    			}
    		}
    		//Les nouvelles zones ensuites
    		for(Zone z : lz){
    			if(z.getLibelleZone().equals(NEW_ZONE)){
    				z = RessourceDelegate.getZone(z.getIdZone());
    				this.zones.add(z);
    			}
    		}
    	}
     
     
    	public String traiterSuppression(){
    		FacesContext fc = FacesContext.getCurrentInstance();
    		ExternalContext ec = fc.getExternalContext();
    		Zone zone = (Zone) ec.getRequestMap().get("zone");
    		try {
    			RessourceDelegate.deleteZone(zone.getIdZone());
    		} catch (Exception e) {
    			return "SuppressionFailure";
    		}
    		return initZones();
    	}
     
    	public void processSauvZone(){
     
    		try {
    			this.zoneToSave = RessourceDelegate.updateZone(this.zoneToSave);
    		} catch (Exception e) {
    			FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_ERROR,"Serveur déjà référencé",e.getMessage().split(":")[1]);
    			FacesContext fc = FacesContext.getCurrentInstance();
    			fc.addMessage("formZones:tableZone:NumLigne:selectServeurId", msg);
     
    		}		
    		String rien = initZones();
    		FacesContext.getCurrentInstance().renderResponse();
    	}
     
    }

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 34
    Points : 11
    Points
    11
    Par défaut
    Une nouvelle piste ajoutant une nouvelle question...

    Dans mon POJO Zone, j'ai:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private Set<Zone> zonesVues = new HashSet<Zone>() ;
    afin de ne pas avoir à gérer les doublons possibles...

    L'attribut que je passe en entrée de mon selectManyCheckbox est donc de type Set<Zone>. Cela pourrait-il poser problème ?

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 34
    Points : 11
    Points
    11
    Par défaut
    Bon, en récupérant les sources et en suivant l'exécution, je me suis aperçu que le renderer du selectManyCheckbox ne prends en compte que des tableaux d'objet ou des List.
    Cela confirme donc que les Set et Map ne sont pas prises en compte. La méthode en question renvoyait donc un null.
    Solution mise en place dans mon cas (EJB3 Entity):
    - création d'un attribut transient

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    /**
             * Liste des zones vues par la zone
             */
    	private Set<Zone> zonesVues = new HashSet<Zone>() ;
     
    	@Transient
    	private List<Zone> zonesVues2 = new ArrayList<Zone>();
    - ses getter et setter s'occupent uniquement de renvoyer les données du Set sous forme de List.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public List<Zone> getZonesVues2() {
    		List<Zone> l = new ArrayList<Zone>();
    		l.addAll(this.zonesVues);
    		return l;
    	}
     
    	public void setZonesVues2(List<Zone> zonesVues2) {
    		Set<Zone> s = new HashSet<Zone>();
    		s.addAll(zonesVues2);
    		this.zonesVues = s;
    	}

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. converter dans datagrid n'est pas appeler quand valeur nulle
    Par Golzinne dans le forum Silverlight
    Réponses: 1
    Dernier message: 09/11/2011, 00h37
  2. La classe Installer n'est pas appelée
    Par alexandreb dans le forum C#
    Réponses: 5
    Dernier message: 06/07/2007, 15h35
  3. [AJAX] [Firefox] send n'est pas appelée tout le temps
    Par MademoiselleL dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 05/07/2007, 15h16
  4. [débutant] la methode Validate() n'est pas appellée
    Par maxattack dans le forum Struts 1
    Réponses: 26
    Dernier message: 16/05/2007, 17h06
  5. [servlet][filtre] filtre qui n'est pas appelé
    Par felix79 dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 29/06/2005, 20h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo