EJB注入jsf托管bean错误

时间:2014-02-19 06:26:38

标签: jsf ejb glassfish-3 managed-bean

我正在尝试创建一个示例应用程序,该应用程序根据表单中用户输入的子字符串显示学生表。我正在使用jsf,ejb和jsf managebean。我正在将ejb注入托管bean,但似乎没有注入ejb。继承我的代码:

jsf托管bean:

@ManagedBean
@RequestScoped
public class InputBean {

@EJB(beanName = "sbean")
private StudentBean studentBean;

private String myValue;
private List<Student> studentList;


public String getList(){
    System.out.println(this.myValue);

    if(studentBean != null){
        System.out.println("Student Bean NOT null");
        this.studentList = studentBean.findByLastname(this.myValue);
    }
    else{
        System.out.println("Student Bean IS null");
    }
    return "dataTable";
} 
//setters and getters here
}

EJB:

@Stateless(name = "sbean")
@LocalBean
public class StudentBean {

@PersistenceContext
private EntityManager em;

public List<Student> findByLastname(String lastname){
    List<Student> students = em.createQuery("select s from Student s where s.lastname LIKE :keyword").setParameter("keyword", lastname +"%").getResultList();
    return students;
} 
}

jsf form:

<h:form>
  <h:inputText value="#{inputBean.myValue}"></h:inputText>
  <h:commandButton value="Submit"
                             action="#{inputBean.getList}"/>
</h:form>

jsf dataTablepage:

<h:dataTable value="#{inputBean.studentList}" var="student">
    <h:column>
       <h:outputText value="#{student.studentId}"></h:outputText>
    </h:column>
    <h:column>
       <h:outputText value="#{student.firstname}"></h:outputText>
    </h:column>
    <h:column>
       <h:outputText value="#{student.middlename}"></h:outputText>
    </h:column>
    <h:column>
       <h:outputText value="#{student.lastname}"></h:outputText>
    </h:column>
 </h:dataTable>

在上面的代码中,总是调用getList方法的else条件,这意味着没有正确地注入EJB。

可能有帮助的其他信息:

  • 我正在使用带有jsf 2.2的glassfish 3.1.1。
  • 我尝试过使用@Named 注释而不是@ManagedBean注释,但我得到了一个 目标无法到达的异常。
  • 我尝试过注入EJB 一个servlet,它工作正常

1 个答案:

答案 0 :(得分:1)

我没有足够的代表添加评论并问你一些问题,所以我会发表评论作为答案。 你说你使用的是glassfish3和jsf2.2。 Glassfish3在javaee6上运行,jsf2.2在javaee7上运行。我建议转到glassfish4和javaee7,或者如果你依赖于glassfish 3,请降级到jsf2.0和javaee6。