我使用SEAM和JBOSS制作基于网络的应用程序。我试图为下拉框创建一个转换器,但每当我在转换器类中使用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>
答案 0 :(得分:0)
您不能在非Seam组件上使用@In。
你能做的是
public Object getAsObject(FacesContext arg0, UIComponent arg1, String arg2) {
EntityManager entityManager = (EntityManager) Component.getInstance("entityManager");
...
...
}
答案 1 :(得分:-1)
我已经解决了问题。我的components.xml文件中缺少一行代码。谢谢大家的回复。