我正在尝试创建一个示例应用程序,该应用程序根据表单中用户输入的子字符串显示学生表。我正在使用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。
可能有帮助的其他信息:
答案 0 :(得分:1)
我没有足够的代表添加评论并问你一些问题,所以我会发表评论作为答案。 你说你使用的是glassfish3和jsf2.2。 Glassfish3在javaee6上运行,jsf2.2在javaee7上运行。我建议转到glassfish4和javaee7,或者如果你依赖于glassfish 3,请降级到jsf2.0和javaee6。