Я пытаюсь создать пример приложения, которое отображает таблицу студентов на основе ввода подстроки пользователем в форме. Я использую jsf, ejb и jsf managebean. я вводя ejb в управляемый компонент, но кажется, что ejb не вводится. Heres мой код:EJB injection in jsf managed bean error
Управляемый компонент JSF:
@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 форма:
<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>
В приведенных выше кодах всегда выполняется условие else метода getList, что означает, что EJB неправильно вводится.
дополнительная информация, которая может помочь:
- Я использую GlassFish 3.1.1 с JSF 2.2.
- Я попытался использовать аннотацию @Named вместо аннотации @ManagedBean, но я получаю исключающее недопустимое исключение .
- Я попытался инъекции EJB в сервлет, и она отлично работает
Когда выполняется ваш getList()? Возможно ли, что это называется до инъекции? Вы можете создать тестовую функцию void init(), аннотировать ее с помощью @PostConstruct и проверить значение studentBean внутри нее, чтобы увидеть, правильно ли работает инъекция. –
Я добавил функцию init, как вы сказали, и studentBean имеет значение – user3308224
Это странно. Любые подсказки от server.log? –