错误:javax.el.PropertyNotFoundException:目标无法到达,“null”返回 null [重复]
Posted
技术标签:
【中文标题】错误:javax.el.PropertyNotFoundException:目标无法到达,“null”返回 null [重复]【英文标题】:Error : javax.el.PropertyNotFoundException: Target Unreachable, 'null' returned null [duplicate] 【发布时间】:2014-10-24 10:27:45 【问题描述】:当我运行我的 JSF 页面时,我在下面遇到了这个错误。
javax.el.PropertyNotFoundException: Target Unreachable, 'null' returned null..
警告:/createStaff.xhtml @33,125 value="#staffBean.staff.firstName":目标不可达,'null' 返回 null javax.el.PropertyNotFoundException: /createStaff.xhtml @33,125 value="#staffBean.staff.firstName":目标无法到达, “空”返回空
我不明白为什么我在使用 value="#staffBean.staff.firstName"
时会遇到错误。当我使用上面的 value="#staffBean.userName"
和 value="#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;
这是我的 User 类,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.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;
【问题讨论】:
【参考方案1】:您的实体staff
中没有属性firstName
更新:
看起来你的staff
object 是空添加:
@PostConstruct
public void init()
staff = new Stuff();
【讨论】:
您好。我的用户实体中有 firstName 属性。员工扩展用户类。知道问题可能出在哪里吗? @LawrenceWong 更新了我的答案。 谢谢!我的代码现在可以工作了。 我做了很多东西,我知道这是问题所在,但在这一点上我忘记了,浪费了很多时间,直到我到达这里。没有初始化对象是我的错误。【参考方案2】:错误提示当访问“firstName”时,无法访问。所以“工作人员”还没有建成。
向您的托管 bean 添加一个方法,这将解决问题。
@PostConstruct
public void init()
staff= new Staff ();
为了更好地理解为什么你应该这样做而不是不
职员职员 = new Staff();
JSF - what is the difference between @PostConstruct and direct method call from constructor?
【讨论】:
感谢您的链接。现在阅读。以上是关于错误:javax.el.PropertyNotFoundException:目标无法到达,“null”返回 null [重复]的主要内容,如果未能解决你的问题,请参考以下文章