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 .
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 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.
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 .
Partager