Hola he estado empezado a usar jsf en su version 2.2, estoy siguiendo un tutorial que encontre por los foros y me encuentro con un error que ya llevo dias, intentando solucionarlo pero no se mismo cual sera el origen del problema espero que me puedan ayudar: El error que tengo es que al mandar a correr la aplicación el servidor me manda el siguiente mensaje:
"An Error Occurred:
No se puede crear la instancia de clase: DAO.ClienteImplDao."
No se que hize mal tengo las siguientes clases:
*Mi clase Cliente
@Entity
@Table(name="Clientes")
public class Cliente implements Serializable{
@Id
private int DNI;
private static final Long serialVersionUID= 1L;
private String nombres;
private String apellidos;
private String sexo;
private int edad;
public int getDNI() {
return DNI;
}
public void setDNI(int DNI) {
this.DNI = DNI;
}
public String getNombres() {
return nombres;
}
public void setNombres(String nombres) {
this.nombres = nombres;
}
public String getApellidos() {
return apellidos;
}
public void setApellidos(String apellidos) {
this.apellidos = apellidos;
}
public String getSexo() {
return sexo;
}
public void setSexo(String sexo) {
this.sexo = sexo;
}
public int getEdad() {
return edad;
}
public void setEdad(int edad) {
this.edad = edad;
}
}
*Mi clase HibernateHelper
public class HibernateHelper {
private static SessionFactory sf;
public static final ThreadLocal session = new ThreadLocal();
public static synchronized void init() {
if (sf != null) {
return;
}
System.out.println("Initializing Hibernate");
try {
Configuration cfg = new Configuration().configure();
sf = cfg.buildSessionFactory();
} catch (Exception he) {
System.err.println("Unable to create session factory from configuration");
he.printStackTrace();
throw new RuntimeException("Unable to "
+ "create session factory from configuration", he);
}
System.out.println("Hibernate initialized");
}
public static SessionFactory sessionFactory() {
if (sf == null) {
init();
}
return sf;
}
public static void destroy() {
if (sf != null) {
try {
sf.close();
} catch (HibernateException he) {
he.printStackTrace();
}
}
sf = null;
System.out.println("Hibernate resources released");
}
public static void closeSession() throws HibernateException {
Session s = (Session) session.get();
session.set(null);
if (s != null) {
s.close();
}
}
public static Session openSession() throws HibernateException {
if (sf == null) {
init();
}
Session s = (Session) session.get();
if (s == null) {
s = sf.openSession();
session.set(s);
}
return (s);
}
}
* Mi interface "Generico"
public interface Generico {
public void guardar(Object obj);
public void actualizar(Object obj);
public void borrar(Object obj);
public void inicializar(Object obj);
public void flush();
public void merge(Object obj);
}
*Mi clase ClienteDAO
public class ClienteDAO implements Generico, Serializable {
Session session;
public ClienteDAO(){
session=HibernateHelper.openSession();
}
@Override
public void guardar(Object obj) {
try {
session.beginTransaction();
session.saveOrUpdate(obj);
session.getTransaction().commit();
} catch (RuntimeException e) {
e.printStackTrace();
}
}
@Override
public void actualizar(Object obj) {
session.beginTransaction();
session.refresh(obj);
session.getTransaction().commit();
}
@Override
public void borrar(Object obj) {
session.beginTransaction();
session.delete(obj);
session.getTransaction().commit();
}
@Override
public void inicializar(Object obj) {
Hibernate.initialize(obj);
}
@Override
public void flush() {
session.flush();
}
@Override
public void merge(Object obj) {
session.beginTransaction();
session.merge(obj);
session.getTransaction().commit();
}
}
*Mi clase ClientImplDao
@ManagedBean(name = "clienteBeanL")
@SessionScoped
public class ClienteImplDao implements Serializable {
private Cliente c;
private ClienteDAO dao;
public ClienteImplDao() {
dao = new ClienteDAO();
}
public Cliente getC() {
return c;
}
public void setC(Cliente c) {
this.c = c;
}
public void submit(){
dao.guardar(c);
}
}
El error es que no me deja crear el bean "clienteBeanL" cuando le quito la anotacion ManagedBean corre la aplicacion y se despliega la vista, pero si pongo anotacion me bota el error que comento al principio del post:
<h:body>
<h:form>
<div id="top" class="top">
<div style="text-align:center;">
<img src="centro.png" width="800" />
</div>
</div>
<div id="left">
<p:growl id="messages" autoUpdate="true"/>
<p:menu>
<p:menuitem value="Gestionar Clientes" action="gestionclientes" />
<p:menuitem value="Gestionar Estacionamientos" url="#" />
<p:menuitem value="Gestionar Reportes" url="#" />
<p:menuitem value="Validar Pagos" url="#"/>
<p:menuitem value="Politicas de Funcionamiento" url="#" />
</p:menu>
</div>
<div id="content" class="left_content">
<p:growl id="growl" showDetail="true"/>
<center>
<h3>SISTEMA PARA EL ESTACIONAMIENTO DEL CENTRO COMERCIAL REINA DEL CISNE </h3>
</center>
<p:panel header="Editar/Crear Cliente" footer="GAD LOJA!">
<h:outputText value="Bienvenido al sistema" />
<!--Comienzo del Formulario Editar Cliente-->
<p:panel header="EDITAR/CREAR CLIENTE">
<p:messages />
<h:panelGrid columns="8" cellpadding="5">
<h:outputLabel for="dni" value="DNI:" />
<p:inputText id="dni" value="#{clienteBeanL.c.DNI}" label="DNI" required="True"
>
<f:validateLength minimum="10" />
</p:inputText>
<p:message for="dni" />
<h:outputText value="" />
<h:outputLabel for="nombres" value="Nombre:" />
<p:inputText id="nombres" value="#{clienteBeanL.c.nombres}" label="Error en nombre">
<f:validateLength minimum="3" />
</p:inputText>
<p:message for="nombres" />
<h:outputText value="" />
<h:outputLabel for="apellidos" value="Apellidos:" />
<p:inputText id="apellidos" value="#{clienteBeanL.c.apellidos}" label="Error en Apellidos" required="True">
<f:validateLength minimum="3" />
</p:inputText>
<p:message for="apellidos" />
<h:outputText value="" />
<h:outputLabel for="edad" value="Edad:" />
<p:inputText id="edad" value="#{clienteBeanL.c.edad}" label="Erro en campo edad" required="True"/>
<p:message for="edad" />
<h:outputText value="" />
<h:outputLabel for="sexo" value="Sexo:" />
<h:inputText id="sexo" value="#{clienteBeanL.c.sexo}" label="Error"
required="True"/>
<p:message for="sexo" />
<h:outputText value="" />
</h:panelGrid>
</p:panel>
<div>
<p:commandButton value="GUARDAR" ajax="false" icon="ui-icon-check"
action="#{clienteBeanL.submit()}"/>
</div>
</p:panel>
</div>
</h:form>
</h:body>
Espero que me puedan ayudar, estaba muy entusiasmado con jsf pero no logro encontrar una solucion, ojo que ya prove cambiando el ambito del managed bean a request y ni asi funko