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 :

erreur avec la methode find


Sujet :

JSF Java

  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 erreur avec la methode find
    Bonjour , je developpe une entreprise application JEE avec netbeans 6.7 ,JSF et MySQL representant une interface web aux clients qui leurs permettent de s'inscrire au premier temps et de login et modifier leurs comptes ultérieurement .

    J'ai utilisé le champs 'login' de type varchar de ma table 'client' de la base de donnees comme Cle primaire .

    Necessairement ,j'ai besoin d'une méthode pour verifier la correspondance entre le login et le password entrés sinon revenir un message d'erreur . Pourcela j'ai utilisé une methode qui contient entre autre la methode find .
    Lorsque j'applle la methode find(login) dans ma page metier ca marche bien ce qui me permet par la suite de verifier ce que je veut .

    Maintenant , ,j'ai ajouté un autre champs UserId de type Integer que j'ai mis comme clé primaire et j'ai choisi l'option 'autoincrement ' pour qu'il soit généré automatiquement . J'ai mis donc le champ 'login' comme champ unique .

    Maintenant quand je veut utiliser la methode 'find ' (pour verifier par exemple l'existence d'un login pareil d'un client déja inscrit ),je peut pas mettre find(UserId) et ca retourne un erreur au deploiement
    au moment du login ) :

    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
    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.validate}: javax.ejb.EJBException
     
    Cause racine
     
    javax.faces.FacesException: #{metier.validate}: javax.ejb.EJBException
     
    Cause racine
     
    javax.faces.el.EvaluationException: javax.ejb.EJBException
     
    Cause racine
     
    javax.ejb.EJBException
     
    Cause racine
     
    java.lang.IllegalArgumentException: An instance of a null PK has been incorrectly provided for this find operation.
     
    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.

    ,j'ai essayé avec find(login) mais ca pas marché car ce n'est pas un clé primaire .


    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
    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.validate}: javax.ejb.EJBException
     
    Cause racine
     
    javax.faces.FacesException: #{metier.validate}: 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.
    La methode de validation est validate:

    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
    public String validate()
    {
       FacesContext context = FacesContext.getCurrentInstance();
        c=cf.find(login);
     
        if (c != null) {
                if (!c.getPassword().equals(password)) {
                    FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR,
                                               "Login Failed!The password specified is not correct.",
                                               "The password specified is not correct.");
                    context.addMessage(null, message);
                    return null;
                }
     
                context.getExternalContext().getSessionMap().put(Client_SESSION_KEY, cf);
                return "validate";}
             else {
                FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR,
                        "Login Failed!Username " +login +" does not exist.",
                        "Username '"
                        + login
                        +
                        "' does not exist.");
                context.addMessage(null, message);
                return null;
            }
    }

    ou
    c est de type Client et cf est ClientFacadeLocal



    Quelqu'un a une idée ?

    Merci d'avance .

  2. #2
    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'ai essayé une autre solution qui résoudt partiellement les choses .

    J'ai mis le champ 'login' comme clé primaire et le champ 'id' comme unique pour
    pouvoir lui attribuer l'option 'autoincrement' .

    Mais il me reste maintenant le probleme de la modification du champ 'login' .
    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()
    {
     
    int rightslevel =1 ;
        insertiondate=new Date();
        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);
        c.setRightslevel(rightslevel);
        c.setInsertiondate(insertiondate);
     
        cf.edit(c);
        return "updated";
    }
    Une idée ?

    Merci

Discussions similaires

  1. Probleme avec la methode Find
    Par hortencia dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 24/06/2011, 14h13
  2. erreur avec la methode findBy
    Par dalidali86 dans le forum JSF
    Réponses: 3
    Dernier message: 27/09/2009, 22h30
  3. Erreur avec le fonction "Find"
    Par tribaleur dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 02/06/2009, 11h48
  4. probleme avec la methode find or createQuery
    Par chady dans le forum Hibernate
    Réponses: 0
    Dernier message: 19/02/2009, 01h04
  5. erreur avec iterator find
    Par befalimpertinent dans le forum SL & STL
    Réponses: 3
    Dernier message: 05/09/2007, 09h19

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