我正在使用 EJB 3.1 和 JSF 2.0 在 Java EE 6 中测试一个小应用程序。
问题是,当我在 JSF 中使用 EL 表达式调用 Backing bean 并运行应用程序时,我得到了异常,因为这个 backing bean 不可访问并且为空。
这是我的 JSF 代码:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
>
<h:head>
<title>Insertar Usuarios</title>
</h:head>
<h:body>
<h:form id="registro">
<h:panelGrid columns="2">
<h:outputText value="Username:"/>
<h:inputText id="username" value="#{registro.usuario.user_Name}"/>
<h:outputText value="Id:"/>
<h:inputText id="id_user" value="#{registro.usuario.userId}"/>
<h:outputText value="Mensaje:"/>
<h:inputText id="mensaje" value="#{registro.usuario.userMessage}" required="true"/>
<h:commandButton value="Crear usuario" action="#{registro.insertarUsuario()}" />
</h:panelGrid>
<h:messages/>
</h:form>
</h:body>
</html>
这是我的无状态 EJB:
@Stateless
public class NegocioImpl implements Negocio{
@PersistenceContext(unitName = "manager1")
private EntityManager em;
@Override
public void sayHelloFromServiceBean(User user) {
User u = em.find(User.class, user.getUserId());
if(u != null){
System.out.println("Cuenta existente");
}
em.persist(user);
}
public String hola(){
return "hola";
}
}
最后是backing bean:
@Named
@RequestScoped
public class Registro {
@Inject
private Negocio negocio;
private User usuario;
public Registro(){
usuario = new User();
}
public User getUsuario() {
return usuario;
}
public void setUsuario(User usuario) {
this.usuario = usuario;
}
public void insertarUsuario(){
negocio.sayHelloFromServiceBean(usuario);
}
public void saluda(){
negocio.hola();
}
}
项目结构是用 Intellij IDEA 制作的。
提前致谢