【问题标题】:EntityManager results in nullPointerException. Using Seam and JBOSSEntityManager 导致 nullPointerException。使用 Seam 和 JBOSS
【发布时间】:2012-06-04 14:10:16
【问题描述】:

我正在使用 SEAM 和 JBOSS 制作一个基于 Web 的应用程序。我正在尝试为下拉框制作转换器,但每当我在转换器类中使用 entityManager 时,我都会收到 NullPointerException。我花了几天时间试图找到这个帮助,任何帮助都将不胜感激

这是我的一些代码。如果还需要,请告诉我:

转换器类:

package edu.uwrf.iss.flowershop.entity;

import javax.faces.application.FacesMessage;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.convert.ConverterException;
import javax.persistence.EntityManager;
import javax.persistence.Query;
import javax.servlet.ServletContext;
import javax.swing.JOptionPane;

import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Scope;

public class EmpConverter implements Converter {

@In
private EntityManager entityManager;

public Object getAsObject(FacesContext arg0, UIComponent arg1, String arg2) {
    int num = Integer.parseInt(arg2);
    entityManager.refresh(getClass());
    Query query = entityManager.createQuery("SELECT e FROM FlowerStoreDelivery WHERE e.deliveryId LIKE :num")
                    .setParameter("num", num);
    JOptionPane.showMessageDialog(null, query.getResultList());
    FlowerStoreEmployee emp = entityManager.find(FlowerStoreEmployee.class, arg2);
    return emp;
}

public String getAsString(FacesContext arg0, UIComponent arg1, Object arg2) throws ConverterException {

return Integer.toString(((FlowerStoreEmployee)arg2).getEmployeeId());
}
}

这是使用转换器的地方:

    <my:dropdown label="Employee ID" id="emp" value="#{deliveryPort.emp}"required="false">
                    <f:converter converterId="EmpConverter" />
                    <s:selectItems value="#{deliveryPort.empList}" var="emp" label="#{emp.employeeId} #{ emp.nameFirst}"/> 
                </my:dropdown>

【问题讨论】:

  • entityManager.refresh() 调用的意义何在?
  • 只是为了测试代码的哪一部分出错了

标签: drop-down-menu jboss nullpointerexception seam converter


【解决方案1】:

您不能在非Seam 组件上使用@In。

你能做的是

public Object getAsObject(FacesContext arg0, UIComponent arg1, String arg2) {
 EntityManager entityManager = (EntityManager) Component.getInstance("entityManager");
  ...
  ...
}

【讨论】:

    【解决方案2】:

    我已经解决了问题。我的 components.xml 文件中缺少一行代码。谢谢大家的回复。

    【讨论】:

    • 干得好!您为什么不为遇到此问题的未来读者提供缺失代码行的详细信息?完成后,请务必将您的答案标记为“已接受”。干杯~
    猜你喜欢
    • 2012-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-07
    • 1970-01-01
    • 2012-01-12
    • 2010-10-31
    • 2011-04-13
    相关资源
    最近更新 更多