EJB注释不适用于selectOneMenu JSF转换器

时间:2014-11-09 17:34:16

标签: java jsf-2 ejb-3.0 one-to-one selectonemenu

我的课程实体有OneToOne关系。在课程创建页面中,我想从下拉列表中选择关系字段(教师)(selectOneMenu)。正如我所知,对于这种操作,你必须实现Converter接口。但是我实现的类中存在问题。我的EJB注释无效。所以我无法从我的数据库中检索转换值。

教师关系,用于在selectOneMenu中显示教师列表。它运作良好

@ManagedBean
@ApplicationScoped
public class TeacherRelation {

@EJB
private TeacherFacade teacherFacade;

public List<Teacher> getAllTeachers() {
    List<Teacher> teacherList=new ArrayList<Teacher>();
    teacherList=teacherFacade.findAll();
    return teacherList;
}

}

菜单:

  <h:selectOneMenu id="teacher" value="#{courseMB.course.teacher}" converter="teacherConvertor">
            <f:selectItems value="#{teacherRelation.allTeachers}" id="items" var="teacherV" itemLabel="#{teacherV.lastName}" />
        </h:selectOneMenu>

最后重要的一个。实施的课程

@RequestScoped
@ManagedBean
@FacesConverter("teacherConvertor")
public class TeacherConvertor implements Converter,Serializable {

/**
 * 
 */
private static final long serialVersionUID = 1L;

@EJB
private static TeacherFacade teacherFacade;



@Override
public Object getAsObject(FacesContext ctx, UIComponent component, String value) {


    Long id=Long.valueOf(value);
    return teacherFacade.find(id);
}

@Override
public String getAsString(FacesContext facesContext, UIComponent component, Object value) {

    return ((Teacher)value).getId().toString();
}

}

servlet的Servlet.service()Faces Servlet抛出异常:java.lang.NullPointerException是teacherFacade.find正在执行时的异常。实际上,teacherFacade为null。我该怎么办?

1 个答案:

答案 0 :(得分:0)

你不能在Converter中使用@EJB,所以你应该使用Context.lookup(Name)。

另请参阅:Getting an EJB in @FacesConverter and @FacesValidator