jsf托管bean中的EJB注入错误
我正在尝试制作一个示例应用程序,它根据用户在表单中输入的子字符串显示一个学生表。我正在使用jsf、ejb和jsf managebean。我正在将ejb注入托管bean,但似乎ejb没有被注入。这是我的密码: jsf托管bean:jsf托管bean中的EJB注入错误,jsf,ejb,glassfish-3,managed-bean,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
@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
}
@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;
}
}
@ManagedBean
@请求范围
公共类InputBean{
@EJB(beanName=“sbean”)
私人学生豆;
私有字符串myValue;
私人名单学生名单;
公共字符串getList(){
System.out.println(this.myValue);
if(studentBean!=null){
System.out.println(“学生Bean非空”);
this.studentList=studentBean.findByLastname(this.myValue);
}
否则{
System.out.println(“学生Bean为空”);
}
返回“数据表”;
}
//这里有二传手和接球手
}
ejb:
@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
}
@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;
}
}
无状态(name=“sbean”)
@本地豆
公共类学生bean{
@持久上下文
私人实体管理者;
公共列表findByLastname(字符串lastname){
List students=em.createQuery(“从Student s中选择s,其中s.lastname LIKE:keyword”).setParameter(“关键字”,lastname+“%”)。getResultList();
留学生;
}
}
jsf表单:
<h:form>
<h:inputText value="#{inputBean.myValue}"></h:inputText>
<h:commandButton value="Submit"
action="#{inputBean.getList}"/>
</h:form>
jsf数据表页面:
<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没有正确注入
其他可能有帮助的信息:
- 我将GlassFish3.1.1与JSF2.2一起使用李>
- 我试过使用@Named 注释而不是@ManagedBean注释,但我得到了一个 目标不可到达异常李>
- 我已经尝试过将EJB注入 一个servlet,它运行良好
您说过您正在使用glassfish3和jsf2.2。Glassfish3在javaee6上运行,jsf2.2特定于javaee7。我建议转到glassfish4和javaee7,或者如果您依赖GlassFish3,请降级到jsf2.0和javaee6。什么时候执行getList()?有没有可能在注射前调用它?您可以创建测试函数void init(),用@PostConstruct对其进行注释,并检查其中studentBean的值以查看注入是否正常工作。从server.log有什么线索吗?好吧,事实上GF3是JSF2.1自带的!