我正在使用EJB 3.1和JSF 2.0测试Java EE 6中的一个小应用程序。
问题是,当我用JS表达式调用JSF中的Backing bean并运行应用程序时,我得到了Exception,因为这个支持bean是不可用的并且是null。
这是我的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";
}
}
最后是支持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制作的。
提前致谢