2013-04-11 67 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;