2010-09-15 53 views
1

大家好我現在正在使用JSF 2.0和EJB3,並且我使用Primefaces來顯示錯誤消息或成功消息,我有兩個問題,一個是當我把Button sumit(JSF命令按鈕)下頁錯誤顯示JSF錯誤目標無法訪問,'null'返回null

/register.xhtml @ 26172值= 「#{} userController.user.username」:目標不可達, '空' 返回null

我的代碼是

用戶實體

/* 
* To change this template, choose Tools | Templates 
* and open the template in the editor. 
*/ 

package com.demoejb.entity; 

import java.io.Serializable; 
import java.util.Date; 
import java.util.List; 
import javax.persistence.Basic; 
import javax.persistence.CascadeType; 
import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.GeneratedValue; 
import javax.persistence.GenerationType; 
import javax.persistence.Id; 
import javax.persistence.JoinColumn; 
import javax.persistence.ManyToOne; 
import javax.persistence.NamedQueries; 
import javax.persistence.NamedQuery; 
import javax.persistence.OneToMany; 
import javax.persistence.Table; 
import javax.persistence.Temporal; 
import javax.persistence.TemporalType; 

/** 
* 
* @author KencyWindy 
*/ 
@Entity 
@Table(name = "iuser") 
@NamedQueries({ 
    @NamedQuery(name = "Iuser.findAll", query = "SELECT i FROM Iuser i"), 
    @NamedQuery(name = "Iuser.findByUid", query = "SELECT i FROM Iuser i WHERE i.uid = :uid"), 
    @NamedQuery(name = "Iuser.findByUsername", query = "SELECT i FROM Iuser i WHERE i.username = :username"), 
    @NamedQuery(name = "Iuser.findByPassword", query = "SELECT i FROM Iuser i WHERE i.password = :password"), 
    @NamedQuery(name = "Iuser.findByPnum", query = "SELECT i FROM Iuser i WHERE i.pnum = :pnum"), 
    @NamedQuery(name = "Iuser.findByZipcode", query = "SELECT i FROM Iuser i WHERE i.zipcode = :zipcode"), 
    @NamedQuery(name = "Iuser.findByState", query = "SELECT i FROM Iuser i WHERE i.state = :state"), 
    @NamedQuery(name = "Iuser.findByDob", query = "SELECT i FROM Iuser i WHERE i.dob = :dob"), 
    @NamedQuery(name = "Iuser.findByEmail", query = "SELECT i FROM Iuser i WHERE i.email = :email"), 
    @NamedQuery(name = "Iuser.findByLastlogin", query = "SELECT i FROM Iuser i WHERE i.lastlogin = :lastlogin"), 
    @NamedQuery(name = "Iuser.findByRegdate", query = "SELECT i FROM Iuser i WHERE i.regdate = :regdate"), 
    @NamedQuery(name = "Iuser.findByAddress", query = "SELECT i FROM Iuser i WHERE i.address = :address"), 
    @NamedQuery(name = "Iuser.findByCity", query = "SELECT i FROM Iuser i WHERE i.city = :city")}) 
public class Iuser implements Serializable { 
    private static final long serialVersionUID = 1L; 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Basic(optional = false) 
    @Column(name = "uid") 
    private Integer uid; 
    @Basic(optional = false) 
    @Column(name = "username") 
    private String username; 
    @Basic(optional = false) 
    @Column(name = "password") 
    private String password; 
    @Basic(optional = false) 
    @Column(name = "pnum") 
    private int pnum; 
    @Basic(optional = false) 
    @Column(name = "zipcode") 
    private int zipcode; 
    @Basic(optional = false) 
    @Column(name = "state") 
    private String state; 
    @Basic(optional = false) 
    @Column(name = "dob") 
    @Temporal(TemporalType.TIMESTAMP) 
    private Date dob; 
    @Basic(optional = false) 
    @Column(name = "email") 
    private String email; 
    @Column(name = "lastlogin") 
    @Temporal(TemporalType.TIMESTAMP) 
    private Date lastlogin; 
    @Column(name = "regdate") 
    @Temporal(TemporalType.TIMESTAMP) 
    private Date regdate; 
    @Basic(optional = false) 
    @Column(name = "address") 
    private String address; 
    @Basic(optional = false) 
    @Column(name = "city") 
    private String city; 
    @JoinColumn(name = "group", referencedColumnName = "g_id") 
    @ManyToOne(optional = false) 
    private Igroup igroup; 
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "iuser") 
    private List<Irent> irentList; 
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "iuser") 
    private List<Ipayment> ipaymentList; 

    public Iuser() { 
    } 

    public Iuser(Integer uid) { 
     this.uid = uid; 
    } 

    public Iuser(Integer uid, String username, String password, int pnum, int zipcode, String state, Date dob, String email, String address, String city) { 
     this.uid = uid; 
     this.username = username; 
     this.password = password; 
     this.pnum = pnum; 
     this.zipcode = zipcode; 
     this.state = state; 
     this.dob = dob; 
     this.email = email; 
     this.address = address; 
     this.city = city; 
    } 

    public Integer getUid() { 
     return uid; 
    } 

    public void setUid(Integer uid) { 
     this.uid = uid; 
    } 

    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 int getPnum() { 
     return pnum; 
    } 

    public void setPnum(int pnum) { 
     this.pnum = pnum; 
    } 

    public int getZipcode() { 
     return zipcode; 
    } 

    public void setZipcode(int zipcode) { 
     this.zipcode = zipcode; 
    } 

    public String getState() { 
     return state; 
    } 

    public void setState(String state) { 
     this.state = state; 
    } 

    public Date getDob() { 
     return dob; 
    } 

    public void setDob(Date dob) { 
     this.dob = dob; 
    } 

    public String getEmail() { 
     return email; 
    } 

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

    public Date getLastlogin() { 
     return lastlogin; 
    } 

    public void setLastlogin(Date lastlogin) { 
     this.lastlogin = lastlogin; 
    } 

    public Date getRegdate() { 
     return regdate; 
    } 

    public void setRegdate(Date regdate) { 
     this.regdate = regdate; 
    } 

    public String getAddress() { 
     return address; 
    } 

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

    public String getCity() { 
     return city; 
    } 

    public void setCity(String city) { 
     this.city = city; 
    } 

    public Igroup getIgroup() { 
     return igroup; 
    } 

    public void setIgroup(Igroup igroup) { 
     this.igroup = igroup; 
    } 

    public List<Irent> getIrentList() { 
     return irentList; 
    } 

    public void setIrentList(List<Irent> irentList) { 
     this.irentList = irentList; 
    } 

    public List<Ipayment> getIpaymentList() { 
     return ipaymentList; 
    } 

    public void setIpaymentList(List<Ipayment> ipaymentList) { 
     this.ipaymentList = ipaymentList; 
    } 

    @Override 
    public int hashCode() { 
     int hash = 0; 
     hash += (uid != null ? uid.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 Iuser)) { 
      return false; 
     } 
     Iuser other = (Iuser) object; 
     if ((this.uid == null && other.uid != null) || (this.uid != null && !this.uid.equals(other.uid))) { 
      return false; 
     } 
     return true; 
    } 

    @Override 
    public String toString() { 
     return "com.demoejb.entity.Iuser[uid=" + uid + "]"; 
    } 

} 

會話bean類

/* 
* To change this template, choose Tools | Templates 
* and open the template in the editor. 
*/ 

package com.demoejb.DAO; 

import com.demoejb.entity.Igroup; 
import com.demoejb.entity.Iuser; 
import java.util.List; 
import javax.ejb.Stateless; 
import javax.ejb.LocalBean; 
import javax.persistence.EntityManager; 
import javax.persistence.PersistenceContext; 

/** 
* 
* @author KencyWindy 
*/ 
@Stateless 
@LocalBean 
public class UserSessionBean { 
    @PersistenceContext(unitName = "DemoEJB3-ejbPU") 
    private EntityManager em; 

    // Add business logic below. (Right-click in editor and choose 
    // "Insert Code > Add Business Method") 



    public void persist(Object object) { 
     em.persist(object); 
    } 

    public Object persistEntity(Object entity) { 
     em.persist(entity); 
     return entity; 
    } 

    public Object updateEntity(Object entity){ 
    return em.merge(entity); 
    } 

    public void removeUser(Iuser user){ 
    user = em.find(Iuser.class, user.getUid()); 
    } 

    public List<Iuser> getAllUser(){ 
    return em.createNamedQuery("Iuser.findAll").getResultList(); 
    } 

    /*Check username and email if new user enter into form 
    * if exist throw exception, this feature will be used in controller 
    */ 
    public Iuser checkExistUser(String email,String username){ 
     Iuser entity = null; 
     try { 
      javax.persistence.Query query = em.createQuery("select u from iuser u where iuser.email = : email or iuser.username = :username"); 
      query.setParameter("email", email); 
      query.setParameter("username", username); 
      entity = (Iuser) query.getResultList(); 
     } catch (Exception e) { 
     } 
     return entity; 
    } 

    public Iuser addUser(Iuser user){ 

     persist(user); 
     return user; 
    } 

    public void persist1(Object object) { 
     em.persist(object); 
    } 
    /* 
    * Get all group in database 
    */ 
    public List<Igroup> getGroup() { 

     return em.createNamedQuery("Igroup.findAll").getResultList(); 
    } 


} 

JSF Managed Bean的類

/* 
* To change this template, choose Tools | Templates 
* and open the template in the editor. 
*/ 

package com.demo.controller; 

import com.demoejb.DAO.UserSessionBean; 
import com.demoejb.entity.Igroup; 
import com.demoejb.entity.Iuser; 
import java.util.Date; 
import java.util.List; 
import javax.ejb.EJB; 
import javax.faces.application.FacesMessage; 
import javax.faces.context.FacesContext; 
import javax.faces.model.SelectItem; 


/** 
* 
* @author KencyWindy 
*/ 
public class UserController { 
    @EJB 
    private UserSessionBean userSessionBean; 
    private Iuser user; 






    /** Creates a new instance of UserController */ 
    public UserController() { 
    } 

    public Iuser getUser() { 
     return user; 
    } 

    public void setUser(Iuser user) { 
     this.user = user; 
    } 

    public String addUser(){ 
     String toReturn = "false"; 
     String email = user.getEmail(); 
     String username = user.getUsername(); 
     try { 
       if(userSessionBean.checkExistUser(email, username) != null){ 
        FacesContext context = FacesContext.getCurrentInstance(); 
        context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, 
        "Error", "username or email id has been exist!")); 
        toReturn = "False"; 
       } 
       else { 
       Igroup g = new Igroup(); 
       Date date = new Date(); 
       java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
       String getDate = sdf.format(date); 
       Date regDate = sdf.parse(getDate); 
       user.setRegdate(regDate); 
       user.setLastlogin(regDate); 
       g.setGId(1); 
       user.setIgroup(g); 
       user = userSessionBean.addUser(user); 
       FacesContext context = FacesContext.getCurrentInstance(); 
       context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, 
        "Sucessful", "New user has been created!")); 

      } 
     } catch (Exception e) { 
     } 

     return toReturn; 
    } 

    /* 
    * Create list group for user can choose to edit 
    * warning !!!! this feature it can posible for administrator 
    */ 

    public javax.faces.model.SelectItem[] getGrouplist(){ 
     SelectItem[] options = null; 
     List<Igroup> lGroups = userSessionBean.getGroup(); 
     if(lGroups != null && lGroups.size() > 0){ 
      int i = 0 ; 
      options = new SelectItem[lGroups.size()]; 
      for (Igroup iGroup : lGroups){ 
       options[i++] = new SelectItem(iGroup.getGId(), iGroup.getGName()); 
      } 
     } 
     return options; 
    } 


} 

Face-配置

<?xml version='1.0' encoding='UTF-8'?> 

<!-- =========== FULL CONFIGURATION FILE ================================== --> 

<faces-config version="2.0" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"> 
    <managed-bean> 
     <description>Controller for enntire User module</description> 
     <managed-bean-name>userController</managed-bean-name> 
     <managed-bean-class>com.demo.controller.UserController</managed-bean-class> 
     <managed-bean-scope>request</managed-bean-scope> 
    </managed-bean> 
</faces-config> 

第二個問題是我不給組表爲以H組合框:selectOne

<h:outputLabel value="Igroup:" for="igroup" /> 
        <h:selectOneMenu id="igroup" value="#{userController.user.igroup}" title="Igroup" required="true" requiredMessage="The Igroup field is required."> 
         <!-- TODO: update below reference to list of available items--> 
         <f:selectItems value="#{userController.grouplist}"/> 
        </h:selectOneMenu> 

當我使用錯誤發生,我不知道爲什麼會發生錯誤?我從JSFManageBean編寫getGrouplist,並在數據庫中有1個方法getAllGroup表中的Current。

回答

6

嘿,我剛剛遇到了一個非常類似的問題,並偶然發現了谷歌。我固定它通過創建在ManagedBean一個空的數據對象,你將其映射到,你的情況將被修正

「私人IUSER用戶;」

「private Iuser user = new Iuser();」

在UserController類中。

因爲我自己對EE很新,我不能真正解釋爲什麼,但它幫助我,希望它能解決你的問題......

+0

我解決了這個問題與填充用戶=新的Iuser();在控制器和類UserController的構造函數中必須實現Serializable,現在它工作正常 – Kency 2010-09-23 02:56:41

0

request範圍意味着對每個請求的控制器被重新創建,並且與原始值 - 丟失。除了該評論之外,您還可以在JSF 2.0中使用註釋。所以,你可以把

@ViewScoped 
@ManagedBean 
public class UserController {..} 

更多信息,請參見this

+0

我按照你的建議,但它沒有工作,它仍然無法達到空返回null當我點擊確定堅持實體 – Kency 2010-09-17 10:35:19

0

您必須爲 「組」 的轉換器類selectOneMenu用於使用類似這樣的例子

selectonemenu jsf on objects with converter`

,並使用這樣的:

<h:selectOneMenu id="igroup" value="#{userController.user.igroup}" title="Igroup"       required="true" requiredMessage="The Igroup field is required."> 
         <!-- TODO: update below reference to list of available items--> 
         <f:selectItems value="#{userController.grouplist}"/> 
         <f:converter converterId="groupConverter" /> 
        </h:selectOneMenu> 
0

在你ManagedBean而不是下面:

private UserSessionBean userSessionBean = new UserSessionBean; 

並解決它。

相關問題