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 :

Modifier un cle primaire avec JSF


Sujet :

JSF Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Février 2009
    Messages
    132
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 132
    Par défaut Modifier un cle primaire avec JSF
    Bonjour , je developpe une entreprise application JEE avec netbeans 6.7 ,JSF et Wampserver , representant une interface web aux clients qui leurs permettent de s'inscrire en fournissant certains données au premier temps et de login et modifier leurs comptes ultérieurement .

    Au moment d'inscription ,le client fournit des informations personnelles qu'on va mettre dans la table appelée 'client' de la base de données .
    J'ai utilisé le champs 'login' de type varchar de ma table 'client' de la base de donnees comme Cle primaire .
    Lorsque je modifie ce champ dans la methode 'update' ca crée une nouvelle ligne avec cette valeur du 'login' et ne modifie pas la ligne existente .
    La methode update est la suivante .

    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
     
    public String update()
    {
     
     
     
        c.setFirstname(firstname);
        c.setLastname(lastname);
        c.setLogin(login);
        c.setPassword(password);
        c.setMobilephone(mobilephone);
        c.setCompany(company);
        c.setTitle(title);
        c.setDepartment(department);
        c.setCams(cams);
     
     
        cf.edit(c);
        return "updated";
    }


    Une idée ?

    Merci

  2. #2
    Expert éminent
    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 : 46
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    que fait cf.edit? Comment est gérée ta persitance? Utilise du des ejb, du mapping hibernate, des dao custom? As-tu des exceptions levées au niveau sql? Sans la moindre information quand à ta couche de persistance, impossible de dire pourquoi ca ne va pas, on est pas devins

    De plus, comme il s'agit d'un changement de la clé primaire, pour beacoup d'outils de DAO, la clé primaire est l'identifiant de ton objet. Change la valeur et tu te réfère à une autre ligne de la table. Je me doute que c'est ce qui se produit.

    En général, en design d'un base de donnée, ne JAMAIS utiliser comme clé primaire une information qui serait entrée par un opérateur, un utilisateur ou autre, sinon c'est toujours le bordel quand il faut changer cette valeur!

  3. #3
    Membre confirmé
    Inscrit en
    Février 2009
    Messages
    132
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 132
    Par défaut
    Salut ,

    j'utilise les EJB . 'edit' est la methode prédifinie dans le 'ClientFacadeLocale' (session bean for entity class ) . 'cf ' est un clientFacadeLocale .
    Donc cf.edit permet de mettre à jour (update) la table 'client' enregistré dans la base de données . Comme j' ai dit ,lorsque je modifie le champ 'login' dans la methode 'update' ca crée une nouvelle ligne avec cette valeur du 'login' et ne modifie pas la ligne existente
    sans lever des exceptions auniveau sql .

    J'ai essayé avant avec 'id' qui est autoincrementé comme cle primaire mais le probleme est que la methode 'find' prédéfinie dans le 'ClientFacadeLocale' ne fonctionne qu'avec un argument de meme type que le primary key donc de type entier int . Or ,j'ai besoin dans certain étapes (comme au moment du login par exemple ) de travailler que avec le login (pour vérifier la correspondance entre login et password) : cf.find(login) impse un errreur


    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
     
     
    type Rapport d'exception
     
    Message
     
    DescriptionLe serveur a rencontré une erreur interne () qui l'a empêché de remplir cette requête.
     
    Exception
     
    javax.servlet.ServletException: #{metier.createuser}: javax.ejb.EJBException
     
    Cause racine
     
    javax.faces.FacesException: #{metier.createuser}: javax.ejb.EJBException
     
    Cause racine
     
    javax.faces.el.EvaluationException: javax.ejb.EJBException
     
    Cause racine
     
    javax.ejb.EJBException
     
    Cause racine
     
    java.lang.IllegalArgumentException: You have provided an instance of an incorrect PK class for this find operation.  Class expected :  class java.lang.Integer , Class received : class java.lang.String.
     
    note Les suivis de pile complets de l'exception et de ses causes principales sont disponibles dans les journaux Sun GlassFish Enterprise Server v2.1.

  4. #4
    Expert éminent
    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 : 46
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    rien ne t'empeche de créer une méthode find(login) que tu code toi même et qui est associé à une requete simple qui fait un select sur base du login.

    Dans ton cas, si tu veux absolument garder login, il va falloir passer par un delete puis un insert.

  5. #5
    Membre confirmé
    Inscrit en
    Février 2009
    Messages
    132
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 132
    Par défaut
    Salut ,

    c'est bon ca a marché avec 'remove' et puis 'edit' . Merci bien .

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

Discussions similaires

  1. cle primaire avec plusieurs champs ?
    Par topolino dans le forum Administration
    Réponses: 12
    Dernier message: 29/04/2014, 09h29
  2. supprimer ou modifier un clé primaire
    Par tahir dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 06/10/2006, 08h01
  3. [Sql]de clé primaire avec accès concurrents
    Par Guilmo1080 dans le forum Oracle
    Réponses: 3
    Dernier message: 04/08/2006, 16h38
  4. Réponses: 3
    Dernier message: 24/04/2006, 21h03
  5. Modifier la surface primaire (avec un filtre)
    Par cemoi dans le forum DirectX
    Réponses: 56
    Dernier message: 01/01/2004, 20h48

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