【问题标题】:Managed bean converter injection托管 bean 转换器注入
【发布时间】:2013-04-03 16:36:00
【问题描述】:

大家好,我对 jsf 托管 bean 和 @PersistenceUnit 有疑问。我正在使用这个转换器

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 上遇到空指针异常。在我的 faces-config 文件中,我有:

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

我错过了什么吗?我不明白为什么要得到空指针。

【问题讨论】:

标签: jsf-2 cdi managed-bean


【解决方案1】:

确保在您的 WAR 项目中有一个 persistence.xml 文件。此外,不能同时使用@ManagedBean@FacesConverter。您需要删除 @FacesConverter&lt;converter&gt; 以避免混淆,并将转换器专门用作托管 bean,如下所示:

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

另外,你为什么不直接注入@PersistenceContext

@PersistenceContext
EntityManager em;

【讨论】:

    猜你喜欢
    • 2012-01-30
    • 1970-01-01
    • 2011-06-11
    • 2012-01-27
    • 2015-03-11
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    • 2013-08-20
    相关资源
    最近更新 更多