[javax.el.PropertyNotFoundException] Problème avec JBoss-Seam
Bonjour à tous,
Je viens de commencer un projet de création d'un site avec les technologies EJB/JPA et seam, donc j'ai créer deux projet (sous eclipse), un projet ejb et un web .Quand je deploie le jar et le war tout va bien et j'ai mon formulaire (enregistrement.xhtml) qui s'affiche correctement, mais quand je le rempli et que je valide j'ai l'erreur suivante:
Code:
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
| type Exception report
message
description The server encountered an internal error () that prevented it from fulfilling this request.
exception
javax.servlet.ServletException: /enregistrement.xhtml @15,73 value="#{utilisateur.email}": Target Unreachable, identifier 'utilisateur' resolved to null
javax.faces.webapp.FacesServlet.service(FacesServlet.java:256)
org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:83)
org.jboss.seam.web.LoggingFilter.doFilter(LoggingFilter.java:58)
org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
org.jboss.seam.web.MultipartFilter.doFilter(MultipartFilter.java:85)
org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
org.jboss.seam.web.ExceptionFilter.doFilter(ExceptionFilter.java:64)
org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
org.jboss.seam.web.RedirectFilter.doFilter(RedirectFilter.java:44)
org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
org.jboss.seam.servlet.SeamFilter.doFilter(SeamFilter.java:158)
org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
root cause
javax.el.PropertyNotFoundException: /enregistrement.xhtml @15,73 value="#{utilisateur.email}": Target Unreachable, identifier 'utilisateur' resolved to null
com.sun.facelets.el.TagValueExpression.getType(TagValueExpression.java:62)
com.sun.faces.renderkit.html_basic.HtmlBasicInputRenderer.getConvertedValue(HtmlBasicInputRenderer.java:81)
javax.faces.component.UIInput.getConvertedValue(UIInput.java:934)
javax.faces.component.UIInput.validate(UIInput.java:860)
javax.faces.component.UIInput.executeValidate(UIInput.java:1065)
javax.faces.component.UIInput.processValidators(UIInput.java:666)
javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1033)
javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1033)
javax.faces.component.UIForm.processValidators(UIForm.java:229)
javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1033)
javax.faces.component.UIViewRoot.processValidators(UIViewRoot.java:662)
com.sun.faces.lifecycle.ProcessValidationsPhase.execute(ProcessValidationsPhase.java:100)
com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251)
com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:117)
javax.faces.webapp.FacesServlet.service(FacesServlet.java:244)
org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:83)
org.jboss.seam.web.LoggingFilter.doFilter(LoggingFilter.java:58)
org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
org.jboss.seam.web.MultipartFilter.doFilter(MultipartFilter.java:85)
org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
org.jboss.seam.web.ExceptionFilter.doFilter(ExceptionFilter.java:64)
org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
org.jboss.seam.web.RedirectFilter.doFilter(RedirectFilter.java:44)
org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
org.jboss.seam.servlet.SeamFilter.doFilter(SeamFilter.java:158)
org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96) |
:bug:
mon fichier enregistrement.xhtml :
Code:
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
| <?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:s="http://jboss.com/products/seam/taglib"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core">
<head>
<title>Enregistrer un nouvel utilisateur</title>
</head>
<body>
<f:view>
<h:form>
<s:validateAll>
<h:panelGrid columns="2">
Email: <h:inputText value="#{utilisateur.email}" required="true"/>
Password: <h:inputSecret value="#{utilisateur.motDePasse}" required="true"/>
Nom: <h:inputText value="#{utilisateur.nom}" required="true"/>
Prenom: <h:inputText value="#{utilisateur.prenom}" required="true"/>
Age: <h:inputText value="#{utilisateur.age}" required="true"/>
Profession: <h:inputText value="#{utilisateur.profession}" required="true"/>
Adresse: <h:inputText value="#{utilisateur.adresse}" required="true"/>
Telephone: <h:inputText value="#{utilisateur.telephone}" required="true"/>
</h:panelGrid>
</s:validateAll>
<h:messages/>
<h:commandButton value="Register" action="#{utilisateur.createUser}" />
</h:form>
</f:view>
</body>
</html> |
Utilisateur.java:
Code:
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 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172
|
@Entity
@Name("utilisateur")
@Scope(SESSION)
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "PROFIL", discriminatorType = DiscriminatorType.STRING)
@Table(name = "UTILISATEUR")
public class Utilisateur implements Serializable {
private static final long serialVersionUID = -8857028078586206554L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ID")
protected int id;
@Column(name = "EMAIL", nullable = false, unique = true)
protected String email;
@Column(name = "MOT_DE_PASSE", nullable = true, length = 15)
protected String motDePasse;
@Column(name = "NOM", nullable = false, length = 100)
protected String nom;
@Column(name = "PRENOM", nullable = false, length = 50)
protected String prenom;
@Column(name = "AGE", nullable = false, length = 3)
protected int age;
@Column(name = "PROFESSION", nullable = false, length = 100)
protected String profession;
@Column(name = "ADRESSE", nullable = false)
protected String adresse;
@Column(name = "TELEPHONE", nullable = false, length = 10)
protected String telephone;
public Utilisateur() {
}
public Utilisateur(int id) {
this.id = id;
}
public Utilisateur(String email, String motDePasse, String nom,
String prenom, int age, String profession, String adresse,
String telephone) {
this.email=email;
this.motDePasse=motDePasse;
this.nom=nom;
this.prenom=prenom;
this.age=age;
this.profession=profession;
this.adresse=adresse;
this.telephone=telephone;
}
public int getId() {
return id;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getMotDePasse() {
return motDePasse;
}
public void setMotDePasse(String motDePasse) {
this.motDePasse = motDePasse;
}
public String getNom() {
return nom;
}
public void setNom(String nom) {
this.nom = nom;
}
public String getPrenom() {
return prenom;
}
public void setPrenom(String prenom) {
this.prenom = prenom;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getProfession() {
return profession;
}
public void setProfession(String profession) {
this.profession = profession;
}
public String getAdresse() {
return adresse;
}
public void setAdresse(String adresse) {
this.adresse = adresse;
}
public String getTelephone() {
return telephone;
}
public void setTelephone(String telephone) {
this.telephone = telephone;
}
protected Object clone() throws CloneNotSupportedException {
return (Utilisateur) super.clone();
}
public boolean equals(Object obj) {
boolean result = false;
if (obj == this) {
result = true;
} else {
if (!(obj instanceof Utilisateur)) {
result = false;
} else {
Utilisateur u = (Utilisateur) obj;
if (!getEmail().equals(u.getEmail())) {
result = false;
} else if (!getNom().equals(u.getNom())) {
result = false;
} else if (!getPrenom().equals(u.getPrenom())) {
result = false;
} else {
result = true;
}
}
}
return result;
}
public String toString() {
return this.getId() + " : " + this.getEmail() + " - " + this.getNom()
+ " " + this.getPrenom();
}
public void createUser(){
System.out.println("public String ");
}
} |
ServiceBean.java :
Code:
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
|
@Stateless
@Name("register")
public class ServiceBean implements Service {
// private UtilisateurDAO dao;
//
@In
private Utilisateur utilisateur;
//
@PersistenceContext//(unitName="LocAgenceBD")
private EntityManager em;
@Logger
private Log log;
@SuppressWarnings("unchecked")
public String createUser() {
List existing = em.createQuery("select email from Utilisateur where email=#{utilisateur.email}").getResultList();
if ( existing.size()==0 )
{
em.persist(utilisateur);
log.info("Registered new user with email #{utilisateur.email}");
return "/welcomeMembre.xhtml";
}
else
{
//FacesMessages.instance().add("email User #{utilisateur.email} already exists");
return null;
}
//return "Utilisateur créé";
}
} |
Je trouve cela très bizzare car j'ai nommé la classe Utilisateur (@Name("utilisateur") ) et j'ai bien un attribut email...
Merci pour votre aide