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

Développement Web en Java Discussion :

GenericSecuredConverter récupère null dans sa méthode getAsObject


Sujet :

Développement Web en Java

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 29
    Points : 34
    Points
    34
    Par défaut GenericSecuredConverter récupère null dans sa méthode getAsObject
    Bonjour à tous,

    je développe un outil de gestion de pas mal de chose dont des absences d'opérateurs dans ce cas présent.

    J'utilise dans un formulaire comme vous le verrai en dessous des listes de sélection. Au départ je récupérais le String et je le traiter avant tout ajout/changement de l'objet pour récupérer les bonnes infos. Or j'ai vu qu'il existait des converter (pour me simplifier la vie). J'ai donc essayé d'intégrer à mon projet le converter que fxrobin avait poster sur ce forum http://www.developpez.net/forums/d11...ique-securise/ , sauf que finalement ca ne se passe pas si bien que ca ...

    Lorsque je charge ma page, je vois grâce à des outprint que la map se charge bien avec mes objets. Le problème est que lorsque je récupère les objets en validant le formulaire, je récupère un objet null.

    Pouvez - vous m'aider à y voir plus clair ?

    Pour info, j'utilise les tech JPA (Eclipselink), JSF (avec notamment primefaces), avec un serveur Glassfish 4 et un SGBD Oracle.

    Merci d'avance (et n'hésitez pas à me poser des questions si je ne suis pas assez clair)

    Le bean absence
    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
    @Entity
    public class Absence {
     
        @Id
        @GeneratedValue( generator = "AbsSeq" )
        @SequenceGenerator( name = "AbsSeq", sequenceName = "ABSENCE_SEQ", allocationSize = 1 )
        private Integer id;
        @NotNull( message = "Veuillez saisir une cause" )
        private String  cause;
     
        public Integer getId() {
            return id;
        }
     
        public void setId( Integer id ) {
            this.id = id;
        }
     
        public String getCause() {
            return cause;
        }
     
        public void setCause( String cause ) {
            this.cause = cause;
        }
     
        @Override
        public boolean equals( Object obj ) {
            if ( obj == null )
                return false;
            if ( !( obj instanceof Absence ) )
                return false;
     
            return ( (Absence) obj ).getId() == this.id;
        }
     
        @Override
        public int hashCode() {
            int hash = 7;
            hash = 83 * hash + Objects.hashCode( this.id );
            return hash;
        }
    }
    Le converter

    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
     
    @SuppressWarnings( "serial" )
    @ManagedBean
    @ViewScoped
    @FacesConverter( "genericSecuredConverter" )
    public class GenericSecuredConverter implements Converter, Serializable {
     
        private Map<UUID, Object> temporaryStore = new HashMap<UUID, Object>();
     
        @Override
        public Object getAsObject( FacesContext context, UIComponent component, String value ) {
            System.out.println( "" + temporaryStore.get( UUID.fromString( value ) ) );
            return temporaryStore.get( UUID.fromString( value ) );
        }
     
        @Override
        public String getAsString( FacesContext context, UIComponent component, Object value ) {
            UUID id = UUID.randomUUID();
            temporaryStore.put( id, value );
     
            System.out.println( "id : " + id + " value : " + value );
            return id.toString();
        }
    }
    Le formulaire de ma facelet

    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
    		<h:form id="formulaire">
     
    		<p:growl id="messages" showDetail="true"/>
     
    			<p:panel header="Création d'une nouvelle absence" toggleable="true" toggleSpeed="500"> 
     
    				<h:outputLabel for="operateur">Operateur <span class="requis">*</span></h:outputLabel>
     
    				<p:selectOneMenu value="#{gestionAbsenceOperateurBean.absenceOperateur.operateur}" converter="genericSecuredConverter">
    				<f:selectItem disabled="true" itemLabel="Choisir un opérateur" />  
                            <f:selectItems value="#{gestionAbsenceOperateurBean.operateurs}"  
                                var="ops"   
                                itemLabel="#{ops.nom} #{ops.prenom}"  
                                itemValue="#{ops}" />  
                        </p:selectOneMenu> 
    				<br />
     
    				<h:outputLabel for="Absence">Cause d'absence <span class="requis">*</span></h:outputLabel>
     
    				<p:selectOneMenu value="#{gestionAbsenceOperateurBean.absenceOperateur.absence}" converter="genericSecuredConverter">
    				<f:selectItem disabled="true" itemLabel="Choisir une cause" />  
                            <f:selectItems value="#{gestionAbsenceOperateurBean.absences}"  
                                var="abs"   
                                itemLabel="#{abs.cause}"  
                                itemValue="#{abs}" />  
                        </p:selectOneMenu> 
     
    				<br />
     
    				<h:outputLabel >Date de début : <span class="requis">*</span></h:outputLabel>
    				<p:calendar id="fromD" value="#{gestionAbsenceOperateurBean.absenceOperateur.dateD}" pattern="dd/MM/yyyy" effect="fadeIn" mindate="#{gestionAbsenceOperateurBean.today}" navigator="true" >
    								<p:ajax event="dateSelect" update="toD"/>
    				</p:calendar>
    				<br />
     
     
    				<h:outputLabel >Date de fin : <span class="requis">*</span></h:outputLabel>
    				<p:calendar id="toD" value="#{gestionAbsenceOperateurBean.absenceOperateur.dateF}" pattern="dd/MM/yyyy" effect="fadeIn" mindate="#{gestionAbsenceOperateurBean.absenceOperateur.dateD}" navigator="true" />
    				<br />
     
    				<h:messages globalOnly="true" infoClass="info" />
     
    	 			<p:commandButton value="Créer" action="#{gestionAbsenceOperateurBean.creation}" update=":formulaire2:listeAbOps :formulaire:messages" process="@form" ajax="true">
    				 </p:commandButton>
     
    				<br />
    			</p:panel>
     
     
    		</h:form>
    Je ne pense pas que l'on aie besoin de mon bean de gestion (il faut quand même savoir qu'il est en ViewScope et que c'est un managedBean).

    EDIT: j'ai regardé la taille de la temporaryStore et elle est à zero lorsque je veux récupérer les objets. De plus, lors de l'appel à la méthode getAsString, je remarque qu'en passant à la seconde selectlist, elle se vide....

  2. #2
    Membre averti
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    250
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2011
    Messages : 250
    Points : 403
    Points
    403
    Par défaut
    Si je me fie à la littérature JSF, un converter est associé à un composant et les méthodes getAsObject et getAsString sont appelées durant différentes phases (Apply Request Values et Render Response). Je doute donc que l'on puisse utiliser des variables d'instances dans un converter.
    Une piste peut être: stocker le converter dans un backing bean et faire pointer l'expression el sur cette propriété du backing bean.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 29
    Points : 34
    Points
    34
    Par défaut
    Pour contourner ce problème, j'ai bien utiliser un converter par objet Java que j'utilisais. J'ai donc défini le equals et hashcode dans mes classes entity et dans mes formulaires j'utilise les converter que j'ai créé.

    L'utilisation du converter generique ne me va pas trop car sa place n'est pas dans le backing bean (selon mon avis d'étudiant toujours) et je voulais l'utiliser pour ne pas avoir à redéfinir un converter à chaque fois, or c'est ce que j'aurais du finalement faire. C'est pourquoi c'est aussi bien de le faire de manière "conventionnelle" dans un converter dédié à mon objet.

    Merci pour la réponse en tout cas.

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

Discussions similaires

  1. [Oracle] Recherche nulle dans une base et affichage
    Par GLDavid dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 27/04/2006, 01h01
  2. ASP et valeur NULL dans requêtes SQL
    Par chuck_m dans le forum ASP
    Réponses: 7
    Dernier message: 13/08/2004, 11h15
  3. Date nulle dans une requete paramétrée avec TParameter
    Par denrette dans le forum Bases de données
    Réponses: 3
    Dernier message: 16/06/2004, 08h37
  4. recherche Date nulle dans une table
    Par lol_adele dans le forum Bases de données
    Réponses: 6
    Dernier message: 16/04/2004, 14h06
  5. Passer une valeur Null dans un argument de procédure
    Par preempalver dans le forum VBA Access
    Réponses: 5
    Dernier message: 30/12/2003, 20h52

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