2014-08-30 31 views
10

JSF sayfamı çalıştırırken bu hatayı aşağıda görüyorum.Hata: javax.el.PropertyNotFoundException: Hedef Erişilemiyor, 'null' döndürdü null

javax.el.PropertyNotFoundException: Hedef ulaşılamaz, 'boş' geri boş ..

Uyarı: Hedef erişilemiyor: /createStaff.xhtml 33.125 değeri = "# {staffBean.staff.firstName}" @ , 'boş' boş javax.el.PropertyNotFoundException bulundu: 33.125 değeri @ /createStaff.xhtml = "# {staffBean.staff.firstName}": ulaşılamaz Hedef, 'boş' boş

I don geri Kullandığım zaman neden hataya gireceğimi anlayamıyorum değer = "#{staffBean.staff.firstName}". Yukarıdaki = "#{staffBean.userName}" değerini ve değer = "#{staffBean.passWord}" değerini kullandığımda sorun yoktur.

Bu Bu benim 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; 
    } 

} 

Bu benim personel varlıktır benim 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> 

olduğunu.

/* 
* 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; 
    } 

} 

Bu, Personel sınıfının hangi kullanıcı sınıfından kaynaklandığını gösterir.

/* 
* 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; 
    } 

} 

cevap

20

Sen varlık hiçbir özelliği firstName var staff

GÜNCELLEME:

senin staff nesne gibi görünüyor

boş eklenti geçerli:

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

Merhaba. Kullanıcı varlığımdaki firstName mülküm var. Personel Kullanıcı sınıfını genişletir. Sorunun nerede olabileceği hakkında bir fikrin var mı? –

+0

@LawrenceWong Cevabımı güncellediniz. – Jens

+0

Teşekkürler! Kodum şimdi çalışıyor. –

5

hata önerdiğinde "firstName o "erişiliyor, erişilemiyor. Yani "Personel" henüz inşa edilmedi.

Yönetilen tabağınıza bir yöntem ekleyin, bu sorunu çözecektir.

@PostConstruct 
public void init() { 
    staff= new Staff(); 
} 
Eğer bu şekilde yapmak gerekir neden daha iyi anlamak için

ve değil

Personel personel = new Personel(); Orada

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

+0

Bağlantı için teşekkürler. Şimdi okumak. –