2013-04-11 68 views
0

嗨,大家好我有jsf託管bean和@PersistenceUnit的問題。我正在使用此轉換器託管bean轉換器注入

import javax.faces.bean.ManagedBean; 
import javax.faces.bean.RequestScoped; 
import javax.faces.component.UIComponent; 
import javax.faces.context.FacesContext; 
import javax.faces.convert.Converter; 
import javax.faces.convert.ConverterException; 
import javax.faces.convert.FacesConverter; 
import javax.persistence.EntityManager; 
import javax.persistence.EntityManagerFactory; 
import javax.persistence.PersistenceUnit; 
import mn.bsoft.crasmonclient.model.Customer; 

/** 
* 
* @author D 
*/ 
@ManagedBean 
@RequestScoped 
@FacesConverter(value="convertToConverter") 
public class ConvertToCustomer implements Converter{ 
    @PersistenceUnit(unitName = "CrasmonClientPU") 
    private EntityManagerFactory entityManagerFactory; 
    private EntityManager em; 

    @Override 
    public Object getAsObject(FacesContext context, UIComponent component, String value) { 
     try { 
      em = entityManagerFactory.createEntityManager(); 
      Object ret = em.find(Customer.class, new Integer(value)); 
      return ret; 
     } catch (ConverterException e) { 
      System.out.println(e.getFacesMessage()); 
     } 
     return null; 
    } 

    @Override 
    public String getAsString(FacesContext context, UIComponent component, Object value) { 
     try { 
      Customer pa = (Customer) value; 
      return String.valueOf(pa.getCustomerId()); 

     } catch (Exception e) { 
      System.out.println(e.getMessage()); 
     } 
     return null; 
    } 

} 

我在EntityManagerFactory上得到了空指針異常。在我的臉部配置文件中,我有:

<converter> 
<converter-id>convertToCustomer</converter-id> 
<converter-class>crasmonclient.converter.ConvertToCustomer</converter-class> 
</converter> 

我錯過了什麼嗎?我不明白爲什麼得到空指針。

+0

相關:HTTP: //stackoverflow.com/questions/7572335/how-to-use-ejb-inject-and-or-autowired-in-facesvalidator/7572413#7572413 – BalusC 2013-04-11 14:00:17

回答

2

確保在WAR項目中有一個persistence.xml文件。此外,不可能同時使用@ManagedBean@FacesConverter。你需要完全去除@FacesConverter<converter>,以避免混亂和使用轉換器作爲託管bean如下:

<h:inputText converter="#{convertToCustomer} /> 

此外,你爲什麼不注入@PersistenceContext直接:

@PersistenceContext 
EntityManager em;