2014-08-30 7 views
10

लौटा जब मुझे अपना जेएसएफ पृष्ठ चला रहा था तो मुझे यह त्रुटि मिली।त्रुटि: javax.el.PropertyNotFoundException: लक्ष्य पहुंच योग्य नहीं, 'शून्य' शून्य

javax.el.PropertyNotFoundException: लक्ष्य नहीं पहुंचा जा सकता, 'अशक्त' लौटे अशक्त ..

चेतावनी: /createStaff.xhtml @ 33,125 value = "# {staffBean.staff.firstName}": लक्ष्य नहीं पहुंचा जा सकता 'अशक्त' लौटे अशक्त javax.el.PropertyNotFoundException: /createStaff.xhtml @ 33,125 value = "# {staffBean.staff.firstName}": लक्ष्य नहीं पहुंचा जा सकता, 'अशक्त' लौटे अशक्त

मैं डॉन जब मैं उपयोग करता हूं तो मैं त्रुटि में क्यों भागूंगा मूल्य = "#{staffBean.staff.firstName}"। जब मैं मान = "#{staffBean.userName}" और उपरोक्त मान = "#{staffBean.passWord}" का उपयोग करता हूं तो कोई समस्या नहीं है।

यह मेरा 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> 

है यह मेरा 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; 
    } 

} 

यह मेरा स्टाफ इकाई है।

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

} 

यह मेरा उपयोगकर्ता वर्ग है जो स्टाफ वर्ग से विस्तारित है।

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

} 

उत्तर

20

आप अपने इकाई में कोई संपत्ति firstName है staff

अद्यतन:

अपने staff वस्तु की तरह लग रहा अशक्त जोड़ने है:

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

वहाँ हाय। मेरे पास मेरी उपयोगकर्ता इकाई में पहली नाम है। कर्मचारी उपयोगकर्ता वर्ग बढ़ाता है। कोई समस्या है कि समस्या कहां हो सकती है? –

+0

@LawrenceWong ने मेरा जवाब अपडेट किया है। – Jens

+0

धन्यवाद! मेरा कोड अब काम कर रहा है। –

5

त्रुटि चलता है कि जब "firstName "पहुंचा जा रहा है, यह नहीं पहुंचा जा सकता है। तो "कर्मचारी" अभी तक नहीं बनाया गया है।

अपने प्रबंधित बीन में एक विधि जोड़ें, इससे समस्या हल हो जाएगी।

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

कारण है कि आप इसे उस तरह से करना चाहिए की बेहतर समझ के लिए और नहीं

स्टाफ कर्मचारियों = नए स्टाफ();

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

+0

लिंक के लिए धन्यवाद। इसे अभी पढ़ना। –

संबंधित मुद्दे