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 générique et sécurisé


Sujet :

JSF Java

  1. #1
    Membre chevronné
    Avatar de fxrobin
    Homme Profil pro
    Architecte SI, Java Fan, API Manager
    Inscrit en
    Novembre 2007
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte SI, Java Fan, API Manager
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2007
    Messages : 875
    Points : 2 112
    Points
    2 112
    Par défaut Converter générique et sécurisé
    Bonjour,

    voici maintenant 4 ans que je "joue" avec JSF et avant hier j'ai eu un idée qui me parait vraiment étrange de ne pas l'avoir eu avant, ni même vue ailleurs sur le net dans divers forums (et en particulier sur celui-ci)

    j'ai toujours un peu trouvé fastidieux de faire un converter pour chacune de mes classes métier afin d'avoir un "getAsString" pour que JSF en fasse son affaire, et un "getAsObject" pour que je retrouve mes billes côté JAVA (instances).

    Et donc j'ai écrit le converter suivant qui me simplifie la vie (très largement) :

    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
    @ManagedBean
    @ViewScoped
    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) {
            return temporaryStore.get(UUID.fromString(value));
        }
     
        @Override
        public String getAsString(FacesContext context, UIComponent component, Object value) {
            UUID id = UUID.randomUUID();
            temporaryStore.put(id, value);
            return id.toString();
        }
    }
    L'idée de ce Converter est d'associer temporairement, le temps de la vue (D'où le @ViewScoped), une Map de UUID et d'instance d'objet.

    Ensuite pour utiliser ce genre de converter, j'utilise l'attribut "converter" et une EL, sur mon composant JSF :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <h:selectOneMenu value="#{userBean.rank}" converter="#{genericSecuredConverter}">
       <f:selectItem itemDisabled="true" itemLabel="Select a rank ..." />
       <f:selectItems value="#{rankFacade.rankList}" var="localRank" itemLabel="#{localRank.fullText}" />
    </h:selectOneMenu>
    Ca marche parfaitement bien. En plus côté "HTML", j'ai donc des UUID sous forme de String qui sont dans la page. Ces UUID, qui n'existent que le temps de la vue, ont une vocation unique ce qui permet de sécuriser l'application (d'où le nom d'oiseau à mon converter : "GenericSecuredConverter" )

    Ca marche tellement bien que je me demande s'il n'y a pas un "loup" derrière tout ça. J'ai confronté mon "Converter" à d'autres développeurs, et eux aussi trouvent ça très bien et ne voient aucun problème ... ce qui me parait d'autant plus étrange.

    Je suis ouvert à vos critiques (à part sur les UUID qui peuvent entrer en conflit, je ne sais plus quelle est la probabilité, mais elle est totalement négligeable)

    PS : désolé si y'a pas la JavaDoc dans mon extrait de code, trop pressé d'avoir vos commentaires ...

  2. #2
    Futur Membre du Club
    Femme Profil pro
    Inscrit en
    Juin 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Juin 2012
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Bonjour,

    j'ai vu sur le forum que votre converter a pu aider quelques personnes. Lorsque j'applique votre converter, il n'y a pas d'erreurs mais le résultat est le meme que si je ne l'utilise pas : Erreur de conversion lors de la définition de la valeur «9» pour «null Converter».

    Je désire lutiliser dans un formulaire afin de valider un integer (clef etrangere), je voulais savoir d'abord si votre converter peut etre utilisé pour un integer?
    Malgré tous les sites parcourus, je n'ai pas vraiment compris dans quels cas on devait utiliser ces converter et comment on savait s'il fallait le passer en string, en objet, en int et à quel moment.

    Je vous remercie d'avance.

  3. #3
    Membre chevronné
    Avatar de fxrobin
    Homme Profil pro
    Architecte SI, Java Fan, API Manager
    Inscrit en
    Novembre 2007
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte SI, Java Fan, API Manager
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2007
    Messages : 875
    Points : 2 112
    Points
    2 112
    Par défaut
    Bonjour Zanka,

    ce converter est fait justement pour "gérer" directement des instances et pas uniquement des clés étrangères.

    En gros, quand une liste ou une instance est parcouru par JSF avec ce converter, des numéros uniques sont générées dans la vue.

    Ensuite ce numéro unique permet de "récupérer" directement l'instance sans avoir à coder un converter spécifique, au niveau d'un ManagedBean

    donc en gros ça sert pour les selectOneMenu, le case à cocher, les boutons radios, c'est à dire là où on veut "récupérer" l'instance d'une classe du modèle.

    Je dois avoir une démo qui traîne qq part, j’essaierai de la poster demain dans l'après-midi, si j'ai un peu de temps.


    Est-ce que tu peux montrer le code dans lequel tu tentes d'utiliser ce converter pour voir si ça convient ?

  4. #4
    Futur Membre du Club
    Femme Profil pro
    Inscrit en
    Juin 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Juin 2012
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Voici le formulaire :
    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
    <ui:composition 
        template="/WEB-INF/template/template.xhtml" 
        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:p="http://primefaces.org/ui" >
     
    <ui:define name="contenu">
        <p:messages id="messages" autoUpdate="true"/>
                <h:form>
                    <h1><h:outputText value="Mise à jour"/></h1>
                    <h:panelGrid columns="2" >
                        <h:outputLabel value="Identifiant : " for="idService" />
                        <h:inputText id="idService" value="#{serviceManagedBean.details.idService}" 
                                     title="idService" required="true" 
                                     requiredMessage="The idService field is required." readonly="true" />
     
                        <h:outputLabel value="Libellé :" for="libService" />
                        <h:inputText id="libService" value="#{serviceManagedBean.details.libService}"                                  
                                     title="libService" required="true" 
                                     requiredMessage="The libService field is required."/>
                        <h:outputLabel value="IdProcessus:" for="idProcessus" />
                        <h:selectOneMenu id="idProcessus" value="#{serviceManagedBean.details.idProcessus}" converter="#{ConverterManagedBean}"
                                         title="IdProcessus" required="false" requiredMessage="The IdProcessus field is required.">
     
                            <f:selectItems value="#{processusManagedBean.idProcessus}"/>
                            <!-- TODO: update below reference to list of available items-->     
                        </h:selectOneMenu>
     
                    </h:panelGrid>
                    <h:commandButton id="back" value="Back" action="ServiceList"/>
                    <h:commandButton id="update" value="Update" action="#{serviceManagedBean.update}"/>                
                    <h:commandButton id="remove" value="Delete" action="#{serviceManagedBean.remove}"/>
                </h:form>
    </ui:define>
    </ui:composition>
    Où "processusManagedBean.idProcessus" est la liste des clef etrangere idProcessus existantes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public List<Integer> getIdProcessus() {
            return processusBean.getAllIdProcessus();
        }
    Après avoir comparé avec d'autres exemple, je crois avoir compris qu'il faut plutot que j'utilise cette liste :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public List<Processus> getProcessus() {
            return processusBean.getAllProcessus();
        }
    Mais si je le fais, j'obtiens cette erreur lors de l'update :

    Erreur de conversion lors de la définition de la valeur «entities.Processus[ idProcessus=9 ]» pour «null Converter».

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 19
    Points : 9
    Points
    9
    Par défaut
    Merci pour le paratage.

    Je voudrai aller un peu plus loin avec votre convertisseur, pour qu'il me crée mes objets s'ils n'existent pas dans la map car je voudrai permettre à mes utilisateurs de rajouter des objets également à la liste si les objets n'existent pas (un peu comme le fait facebook et d'autres sites maintenant).
    Pour cela j'ai pensé à utiliser la généricité Java, c'est à dire remplacer la classe Object par une classe générique T (MonConverter<T>) et instancier un objet avec le bon type T dans le getObject quand il n'existe pas.
    Mon problème c'est que je n'arrive pas à dire aux JSF d'instancier mon Bean avec un type d'objet donné sachant que je passe par code pour instancier le bean converter à l'aide de l'annotation managedProperty.
    Avez vous une idée de comment faire cela.

    Merci

  6. #6
    Membre chevronné
    Avatar de fxrobin
    Homme Profil pro
    Architecte SI, Java Fan, API Manager
    Inscrit en
    Novembre 2007
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte SI, Java Fan, API Manager
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2007
    Messages : 875
    Points : 2 112
    Points
    2 112
    Par défaut
    Okay, je vois ce que tu souhaites faire, je vais y réfléchir et je te tiens au courant. Mais je crois qu'il va falloir abandonner @ManagedProperty ... pas sûr, mais je pense.

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 18
    Points : 16
    Points
    16
    Par défaut Je n'arrive pas à le faire fonctionner
    Bonjour,
    Merci pour le partage de ce composant qui m'a l'air vraiment utile et bien fait.
    Cependant, je n'arrive pas à le faire fonctionner correctement.
    En mettant des Sysout un peu partout je vois que mes objets transitent bien dans le converter et qu'ils sont bien retrouvés au retour.
    Cependant l'objet cible n'est pas sétté. sa valeur ne change pas. Comme si mon selectOneRadio ne sétté pas mon objet cible avec l'objet récupéré du converter.


    voici mon code JSF :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    		<h:selectOneRadio id="situationPro" value="#{CandidatService.situationPro}" layout="pageDirection" converter="#{entityConverter}">
    			<f:selectItems value="#{SituationProService.findAll()}" />
    			<f:ajax execute="@this" render="test"/>
    		</h:selectOneRadio>
     
            <h:outputText id="test" value="#{CandidatService.situationPro.libelleSituationPro}" />
    Et ton converteur, auquel j'ai modifié les annotations pour que spring et jsf retrouvent leurs billes.

    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
     
    @Component("entityConverter")
    @FacesConverter("entityConverter")
    public class EntityConverter 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("ici "+temporaryStore.get(UUID.fromString(value)));
     
            return temporaryStore.get(UUID.fromString(value));
        }
     
        @Override
        public String getAsString(FacesContext context, UIComponent component, Object value) {
        	System.out.println("la "+(value instanceof SituationPro));
            UUID id = UUID.randomUUID();
            temporaryStore.put(id, value);
            return id.toString();
        }
    }

    Dans le getAsString j'ai bien des "true", donc ce sont bien les objets entiers qui transitent et non un simple string.
    et au retour dans le getAsObject, il retrouve bien un object (de type SituationPro).

    Seulement, mon objet '#{CandidatService.situationPro}' n'est pas sétté au moment de la requête ajax ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    @Component("CandidatService")
    @Scope("session")
    public class CandidatService implements ICandidatService{
     
            // + getter et setter
    	SituationPro situationPro = new SituationPro();
     
    ...
    Merci d'avance pour votre réponse.
    Bonne journée.

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 18
    Points : 16
    Points
    16
    Par défaut généric converter
    Bonjour,
    Finalement, j'ai l'impression que mon backing bean n'est pas sétté si je renvoie autre chose que null...

    Si null -> ma vue est bien modifié, le libébé par défaut disparait.
    Sinon, rien ne se passe. l'état de mon objet est inchangé, le libéllé par défaut dans la vue ne bouge pas.

    J'ai beau construire un objet bidon dans on getAsObject et le renvoyer, mon backing bean n'est pas modifié...
    Je ne comprend vraiment pas ce qu'il se passe...

  9. #9
    Membre chevronné
    Avatar de fxrobin
    Homme Profil pro
    Architecte SI, Java Fan, API Manager
    Inscrit en
    Novembre 2007
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte SI, Java Fan, API Manager
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2007
    Messages : 875
    Points : 2 112
    Points
    2 112
    Par défaut
    Attention il faut que le converter soit en "ViewScoped" ... sinon ça ne fonctionnera pas.

    @FacesConverter n'est pas utile.

    J'ai fait une version un peu plus "robuste" avec une Map bidirectionnelle, mais qui dépend de Apache Commons Collection du coup.

    Voici ce que cela donne :

    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
    import java.io.Serializable;
    import java.util.UUID;
     
    import javax.annotation.PostConstruct;
    import javax.faces.bean.ManagedBean;
    import javax.faces.bean.ViewScoped;
    import javax.faces.component.UIComponent;
    import javax.faces.context.FacesContext;
    import javax.faces.convert.Converter;
     
    import org.apache.commons.collections.BidiMap;
    import org.apache.commons.collections.bidimap.DualHashBidiMap;
     
     
    @SuppressWarnings("serial")
    @ManagedBean
    @ViewScoped
    public class GenericConverter implements Converter, Serializable {
        private BidiMap temporaryStore;
     
        @PostConstruct
        public void init() {
            temporaryStore = new DualHashBidiMap();
        }
     
        @Override
        public Object getAsObject(FacesContext context, UIComponent component,
                String value) {
            UUID key = UUID.fromString(value);
            if (key != null && temporaryStore.containsKey(key)) {
                return temporaryStore.get(key);
            } else {
                return value;
            }
        }
     
        @Override
        public String getAsString(FacesContext context, UIComponent component,
                Object value) {
            if (value == null) {
                return null;
            } else {
                if (!temporaryStore.containsValue(value)) {
                    UUID id = UUID.randomUUID();
                    temporaryStore.put(id, value);
                    return id.toString();
                } else {
                    return temporaryStore.getKey(value).toString();
                }
            }
        }
    }

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 18
    Points : 16
    Points
    16
    Par défaut généric converter
    Merci pour ta réponse,
    J'ai mis a jour le converter, laissé le viewScopped.
    Toujours pareil, j'ai aussi "déAJAXifié" le composant et ajouté un submit pour voir ce qu'il se passe comme ca.
    Résultat, l'action de mon submit n'est jamais appelée comme s’il était court-circuité par un return false niveau JS...

    et voici ce que je trouve dans les logs (une erreur de validation ???) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Hibernate: select situationp0_.SITUATION_PRO_ID as SITUATION1_12_, situationp0_.LIBELLE_SITUATION_PRO as LIBELLE2_12_, situationp0_.STATUT_ID as STATUT4_12_, situationp0_.TEM_VALIDE as TEM3_12_ from EVACATAIRES.SITUATION_PRO situationp0_
    Hibernate: select situationp0_.SITUATION_PRO_ID as SITUATION1_12_, situationp0_.LIBELLE_SITUATION_PRO as LIBELLE2_12_, situationp0_.STATUT_ID as STATUT4_12_, situationp0_.TEM_VALIDE as TEM3_12_ from EVACATAIRES.SITUATION_PRO situationp0_
    Hibernate: select situationp0_.SITUATION_PRO_ID as SITUATION1_12_, situationp0_.LIBELLE_SITUATION_PRO as LIBELLE2_12_, situationp0_.STATUT_ID as STATUT4_12_, situationp0_.TEM_VALIDE as TEM3_12_ from EVACATAIRES.SITUATION_PRO situationp0_
    11 mars 2013 11:54:25 com.sun.faces.renderkit.RenderKitUtils renderUnhandledMessages
    INFO: AVERTISSEMENT : Les FacesMessage(s) ont ?t? mis en file d?attente, mais n?ont peut-?tre pas ?t? affich?s.
    sourceId=formElem:situationPro[severity=(ERROR 2), summary=(formElem:situationPro?: erreur de validation. La valeur est incorrecte.), detail=(formElem:situationPro?: erreur de validation. La valeur est incorrecte.)]

  11. #11
    Membre chevronné
    Avatar de fxrobin
    Homme Profil pro
    Architecte SI, Java Fan, API Manager
    Inscrit en
    Novembre 2007
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte SI, Java Fan, API Manager
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2007
    Messages : 875
    Points : 2 112
    Points
    2 112
    Par défaut
    tu devrais mettre un h:messages histoire de voir les erreurs de validation dans ta page.

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 18
    Points : 16
    Points
    16
    Par défaut généric converter
    J'ai enfin trouvé mon erreur !
    Ma méthode equals n'était pas bonne. je faisais un

    Or, en regardant de plus prêt, j'ai vu que hibernate m'a généré mes id avec des bigDecimal...
    donc je retournais toujours false car se sont des objets et non des int classiques.

    j'ai donc fait un id.equals(o.id) et c'est bon.
    Erreur de merde ^^.
    Merci en tout cas pour ton aide Robin

  13. #13
    Membre chevronné
    Avatar de fxrobin
    Homme Profil pro
    Architecte SI, Java Fan, API Manager
    Inscrit en
    Novembre 2007
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte SI, Java Fan, API Manager
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2007
    Messages : 875
    Points : 2 112
    Points
    2 112
    Par défaut
    J'ai pas aidé grand chose sur ton problème venait plutôt du equals et hashCode.

    D'ailleurs, si tu as redéfini equals, tu as forcément redéfini hashCode, rassure moi ...

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 18
    Points : 16
    Points
    16
    Par défaut
    Oui oui biensur

  15. #15
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2011
    Messages : 7
    Points : 8
    Points
    8
    Par défaut SVP meme problème URGENT
    Bonjour,
    j'ai le meme problème, effet voila mon code xhtml:

    <h:outputText value="ID Dossier AVA:" />
    <p:selectOneMenu id="dossierMvt" value="#{MouvementBean.selecteddoss}" >
    <f:selectItems value="#{MouvementBean.dossList}" />
    </p:selectOneMenu>

    voila le code de mon bean:
    @Autowired
    private transient DossieravaBusiness dossieravaBusiness;
    @Autowired
    private transient MouvementBusiness mouvementBusiness;

    private Mouvement currentMvt;
    private Dossierava selecteddoss;
    .....
    getters & setters

    @PostConstruct
    public void init()
    {
    currentMvt = new Mouvement();
    }

    //cette méthode pour remplir la liste
    public List<SelectItem> getDossList()
    {
    List<SelectItem> dossList = new ArrayList<SelectItem>();
    for (Dossierava each : dossieravaBusiness.recupererListDossava())
    {
    dossList.add(new SelectItem(each.getIddoss()));
    }
    return dossList;
    }

    //cette méthode pour ajouter appelé par un bouton ajout
    public void ajouter()
    {
    mouvementBusiness.ajouterModifierMouvement(currentMvt);
    FacesContext context = FacesContext.getCurrentInstance();
    context.addMessage(null, new FacesMessage("Mouvement ajouté"));

    }

    aprés avoir selectionné l'id du dossier d'aprés la liste en cliquant sur l'ajout il m'indique une erreur qu'il ne peu pa convertir un type Long to un Object... comment faire SVP
    Merci

Discussions similaires

  1. [SQL Server] Error converting data type varchar...
    Par Sir Tengu dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 13/06/2003, 10h46
  2. psqlODBC est-il sécurisé?
    Par Hannibal dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 10/06/2003, 11h21
  3. [Debutant] [Date] convertion date
    Par BenoitM dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 17/04/2003, 14h55
  4. Portail avec Paiement Sécurisé
    Par LLaurent dans le forum XMLRAD
    Réponses: 2
    Dernier message: 20/02/2003, 17h27
  5. Convertion de type VARIANT à type CString
    Par j_grue dans le forum MFC
    Réponses: 2
    Dernier message: 07/11/2002, 14h18

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