2014-08-30 6 views
10

Ich habe diesen Fehler unten, als ich meine JSF-Seite ausgeführt wurde.Fehler: javax.el.PropertyNotFoundException: Ziel nicht erreichbar, 'null' hat null zurückgegeben

javax.el.PropertyNotFoundException: Ziel nicht erreichbar, 'null' zurück null ..

Warnung: /createStaff.xhtml @ 33.125 value = "# {staffBean.staff.firstName}": Ziel nicht erreichbar , 'null' null javax.el.PropertyNotFoundException zurückgegeben: /createStaff.xhtml @ 33.125 value = "# {staffBean.staff.firstName}": Ziel nicht erreichbar, 'null' zurück null

I don Warum bekomme ich den Fehler, wenn ich benutze? Wert = "#{staffBean.staff.firstName}". Es gibt kein Problem, wenn ich den Wert = "#{staffBean.userName}" und Wert = "#{staffBean.passWord}" oben verwende.

Das ist mein createStaff.xhtml

<?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:h="http://xmlns.jcp.org/jsf/html" 
     xmlns:f="http://xmlns.jcp.org/jsf/core" 
     xmlns:p="http://primefaces.org/ui"> 
    <h:head> 
     <title>Create Staff</title> 
    </h:head> 
    <h:body> 
     <f:view> 
      <h:form> 
       <p:panel id ="panel" header="Staff Creation"> 
        <p:messages id="msgs" /> 
        <h:panelGrid columns="3" columnClasses="label, value"> 
         <h:outputText value="Username: *" /> 
         <p:inputText id="username" value="#{staffBean.userName}" required="true" label="Username"> 
         </p:inputText> 
         <p:message for="username" /> 

         <h:outputLabel for="pwd1" value="Password 1: *" /> 
         <p:password id="pwd1" value="#{staffBean.passWord}" match="pwd2" label="Password 1" required="true" feedback="true" /> 
         <p:message for="pwd1" /> 

         <h:outputLabel for="pwd2" value="Password 2: *" /> 
         <p:password id="pwd2" value="#{staffBean.passWord}" label="Password 2" required="true" feedback="true" /> 
         <p:message for="pwd2" /> 

         <h:outputText value="First name: *" /> 
         <p:inputText id="firstname" value="#{staffBean.staff.firstName}" required="true" label="Username"> 
         </p:inputText> 
         <p:message for="firstname" /> 

         <h:outputText value="Last name: *" /> 
         <p:inputText id="lastname" value="#{staffBean.staff.lastName}" required="true" label="Username"> 
         </p:inputText> 
         <p:message for="lastname" /> 

         <h:outputText value="Last name: *" /> 
         <p:selectOneRadio id="genderconsole" value="#{staffBean.staff.gender}" required="true"> 
          <f:selectItem itemLabel="Male" itemValue="Male" /> 
          <f:selectItem itemLabel="Female" itemValue="Female" /> 

         </p:selectOneRadio> 
         <p:message for="genderconsole" /> 


         <p:commandButton value="Create Staff" 
             id="ajax" 

             update="panel"> 

         </p:commandButton> 
        </h:panelGrid> 
       </p:panel> 
      </h:form> 
     </f:view> 
    </h:body> 
</html> 

Dies ist mein StaffBean.java

/* 
* To change this license header, choose License Headers in Project Properties. 
* To change this template file, choose Tools | Templates 
* and open the template in the editor. 
*/ 
package managedbean; 

import entities.Staff; 
import java.io.IOException; 
import java.io.Serializable; 
import java.util.HashSet; 
import java.util.Set; 
import javax.ejb.EJB; 
import javax.enterprise.context.SessionScoped; 
import javax.faces.FacesException; 
import javax.faces.application.FacesMessage; 
import javax.faces.context.ExternalContext; 
import javax.faces.context.FacesContext; 
import javax.faces.view.ViewScoped; 
import javax.inject.Named; 
import sessionBean.staffSessionBeanLocal; 


@Named(value = "staffBean") 
@SessionScoped 
//@ViewScoped 
public class StaffBean implements Serializable { 

    @EJB 
    private staffSessionBeanLocal staffSession; 
    private String userName; 
    private String passWord; 
    private String loginStatus; 
    private Staff staff; 

........... 
////Code removed 

    public String getUserName() { 
     return userName; 
    } 

    public void setUserName(String userName) { 
     this.userName = userName; 
    } 

    public String getPassWord() { 
     return passWord; 
    } 

    public void setPassWord(String passWord) { 
     this.passWord = passWord; 
    } 

    public String getLoginStatus() { 
     return loginStatus; 
    } 

    public void setLoginStatus(String loginStatus) { 
     this.loginStatus = loginStatus; 
    } 

    public Staff getStaff() { 
     return staff; 
    } 

    public void setStaff(Staff staff) { 
     this.staff = staff; 
    } 

} 

Dies ist meine Mitarbeiter Einheit.

/* 
* To change this license header, choose License Headers in Project Properties. 
* To change this template file, choose Tools | Templates 
* and open the template in the editor. 
*/ 

package entities; 

import java.io.Serializable; 
import java.util.ArrayList; 
import java.util.List; 
import javax.persistence.CascadeType; 
import javax.persistence.Entity; 
import javax.persistence.FetchType; 
import javax.persistence.GeneratedValue; 
import javax.persistence.GenerationType; 
import javax.persistence.Id; 
import javax.persistence.ManyToMany; 


@Entity 
public class Staff extends User implements Serializable { 
    private static final long serialVersionUID = 1L; 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long id; 
    private String imageURL; 
    @ManyToMany(cascade = {CascadeType.ALL}, fetch = FetchType.EAGER) 
    private List<Roles> roles = new ArrayList<Roles>(); 

    @Override 
    public Long getId() { 
     return id; 
    } 

    @Override 
    public void setId(Long id) { 
     this.id = id; 
    } 

    @Override 
    public int hashCode() { 
     int hash = 0; 
     hash += (id != null ? id.hashCode() : 0); 
     return hash; 
    } 

    @Override 
    public boolean equals(Object object) { 
     // TODO: Warning - this method won't work in the case the id fields are not set 
     if (!(object instanceof Staff)) { 
      return false; 
     } 
     Staff other = (Staff) object; 
     if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) { 
      return false; 
     } 
     return true; 
    } 

    @Override 
    public String toString() { 
     return "entities.Staff[ id=" + id + " ]"; 
    } 

    public String getImageURL() { 
     return imageURL; 
    } 

    public void setImageURL(String imageURL) { 
     this.imageURL = imageURL; 
    } 

    public List<Roles> getRoles() { 
     return roles; 
    } 

    public void setRoles(List<Roles> roles) { 
     this.roles = roles; 
    } 

} 

Dies ist meine Benutzerklasse, von der sich die Staff-Klasse erstreckt.

/* 
* To change this license header, choose License Headers in Project Properties. 
* To change this template file, choose Tools | Templates 
* and open the template in the editor. 
*/ 

package entities; 

import java.io.Serializable; 
import java.sql.Timestamp; 
import javax.persistence.Entity; 
import javax.persistence.GeneratedValue; 
import javax.persistence.GenerationType; 
import javax.persistence.Id; 
import javax.persistence.MappedSuperclass; 


@MappedSuperclass 
public class User implements Serializable { 
    private static final long serialVersionUID = 1L; 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long id; 
    private String password; 
    private Timestamp joinDate; 
    private String userType; 
    private String gender; 
    private String email; 
    private String contactNo; 
    private String firstName; 
    private String lastName; 
    private Timestamp dOB; 
    private String address; 
    private String accountStatus; 
    private int numOfFailLogin; 
    private String maritalStatus; 
    private String activationCode; 


    public Long getId() { 
     return id; 
    } 

    public void setId(Long id) { 
     this.id = id; 
    } 

    @Override 
    public int hashCode() { 
     int hash = 0; 
     hash += (id != null ? id.hashCode() : 0); 
     return hash; 
    } 

    @Override 
    public boolean equals(Object object) { 
     // TODO: Warning - this method won't work in the case the id fields are not set 
     if (!(object instanceof User)) { 
      return false; 
     } 
     User other = (User) object; 
     if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) { 
      return false; 
     } 
     return true; 
    } 

    @Override 
    public String toString() { 
     return "entities.User[ id=" + id + " ]"; 
    } 


    public String getPassword() { 
     return password; 
    } 

    public void setPassword(String password) { 
     this.password = password; 
    } 

    public Timestamp getJoinDate() { 
     return joinDate; 
    } 

    public void setJoinDate(Timestamp joinDate) { 
     this.joinDate = joinDate; 
    } 

    public String getUserType() { 
     return userType; 
    } 

    public void setUserType(String userType) { 
     this.userType = userType; 
    } 

    public String getGender() { 
     return gender; 
    } 

    public void setGender(String gender) { 
     this.gender = gender; 
    } 

    public String getEmail() { 
     return email; 
    } 

    public void setEmail(String email) { 
     this.email = email; 
    } 

    public String getContactNo() { 
     return contactNo; 
    } 

    public void setContactNo(String contactNo) { 
     this.contactNo = contactNo; 
    } 

    public String getFirstName() { 
     return firstName; 
    } 

    public void setFirstName(String firstName) { 
     this.firstName = firstName; 
    } 

    public String getLastName() { 
     return lastName; 
    } 

    public void setLastName(String lastName) { 
     this.lastName = lastName; 
    } 

    public Timestamp getdOB() { 
     return dOB; 
    } 

    public void setdOB(Timestamp dOB) { 
     this.dOB = dOB; 
    } 

    public String getAddress() { 
     return address; 
    } 

    public void setAddress(String address) { 
     this.address = address; 
    } 

    public String getAccountStatus() { 
     return accountStatus; 
    } 

    public void setAccountStatus(String accountStatus) { 
     this.accountStatus = accountStatus; 
    } 

    public String getMaritalStatus() { 
     return maritalStatus; 
    } 

    public void setMaritalStatus(String maritalStatus) { 
     this.maritalStatus = maritalStatus; 
    } 

    public int getNumOfFailLogin() { 
     return numOfFailLogin; 
    } 

    public void setNumOfFailLogin(int numOfFailLogin) { 
     this.numOfFailLogin = numOfFailLogin; 
    } 

    public String getActivationCode() { 
     return activationCode; 
    } 

    public void setActivationCode(String activationCode) { 
     this.activationCode = activationCode; 
    } 

} 

Antwort

20

Sie haben keine Eigenschaft firstName in Ihrem Unternehmen staff

UPDATE:

wie Ihr staff Objekt Looks ist null add:

@PostConstruct 
public void init() { 
    staff = new Stuff(); 
} 
+0

Hallo dort. Ich habe die FirstName-Eigenschaft in meiner User-Entität. Mitarbeiter erweitert Benutzerklasse. Irgendeine Idee, wo das Problem sein könnte? –

+0

@LawrenceWong Habe meine Antwort aktualisiert. – Jens

+0

Danke! Mein Code funktioniert jetzt. –

5

Der Fehler deutet darauf hin, dass, wenn der „Vornamen "wird zugegriffen, es kann nicht erreicht werden. Also der "Stab" wurde noch nicht gebaut.

Fügen Sie Ihrer verwalteten Bean eine Methode hinzu. Dadurch wird das Problem behoben.

@PostConstruct 
public void init() { 
    staff= new Staff(); 
} 

Zum besseren Verständnis, warum Sie es auf diese Weise tun sollten und nicht

Mitarbeiter Personal = new Mitarbeiter();

JSF - what is the difference between @PostConstruct and direct method call from constructor?

+0

Danke für den Link. Lesen Sie es jetzt. –

Verwandte Themen