Olá…
Estou pelejando em JSF e não estou conseguindo entender o motivo do código não funcionar
/index.xhtml @10,80 value="#{usuarioController.listarUsuarios}": Property 'listarUsuarios' not found on type br.com.self.controller.UsuarioController
Se alguém puder me ajudar nessa ficarei grato. Lembrando também que existem camadas mais profundas (Hibernate) porém o problema está realmente no controller que supostamente não contém a propriedade ?!?!?!?
@ManagedBean
@SessionScoped
public class UsuarioController {
private Usuario usuario ;
private DataModel<Usuario> listaUsuarios ;
public DataModel<Usuario> getListaUsuarios() {
List<Usuario> lista = new UsuarioDAOImpl().list() ;
System.out.println("!!!");
listaUsuarios = new ListDataModel<Usuario>(lista) ;
return listaUsuarios ;
}
public Usuario getUsuario() {
return usuario;
}
public void setUsuario(Usuario usuario) {
this.usuario = usuario;
}
}
Aqui o code do xhtml que está acessando o bean
<!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"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets">
<h:head></h:head>
<h:body>
<h1>Teste do dataTable</h1>
<h:dataTable value="#{usuarioController.listarUsuarios}" var="listaUsuarios" >
<h:column>
<f:facet name="header">
<h:outputText value="#{listaUsuarios.login}"/>
</f:facet>
</h:column>
</h:dataTable>
</h:body>
</html>
private Usuario usuario = new Usuario(); (get e set)
private UsuarioDaoImpl dao = new UsuarioDaoImpl(); (get e set)
veja como ficou
public DataModel<Usuario> getListaUsuarios() {
List<Usuario> lista = dao.list();
System.out.println("!!!");
listaUsuarios = new ListDataModel<Usuario>(lista) ;
return listaUsuarios ;
}
Acho que pude não ter sido objetivo para exemplificar o problema, portanto…
Este é apenas um teste que estou fazendo para estudar JSF, cheguei a compor várias classes @ManagedBean porém sem utilização da persistência dentro do código do bean muito menos com elementos Collections
infelizmente esse não consegui por para funcionar…
esse bean deveria chamar um DAO para persistir o objeto Usuario (acho que talvez essa camada nem venha ao caso)
o jsf diz não conseguir acessar a property descrita acima… porém ela está lá, n consigo entender pois, quando eu não declaro o bean o erro informado é NullPointerException dizendo que o tipo não existe ou não foi encontrato e quando eu declaro ele diz que a propriedade não existe…
Ja perdi alguns fios de cabelo aqui (os poucos que me restam)
o que vc tem nessa classe
UsuarioDaoImpl ?
cole ai
[quote=tmvolpato]private Usuario usuario = new Usuario(); (get e set)
private UsuarioDaoImpl dao = new UsuarioDaoImpl(); (get e set)
[/quote]
Vou verificar, ja retorno (mas não intendi direito o pq tenho que transportar um identificador do meu dao para dentro do bean), poderia explicar?
vou testar e ja retorno
se é só para teste usa os exemplos
que tem la no site do prime
que não utiliza camada dao
apenas cria uma lista no proprio ManagedBean para popular o datable de exemplo
Desculpe se não coloquei a totalidade do código, achei que não seria relevante para isto
1º o contrato do DAO
package br.com.self.dao;
import java.util.List;
import br.com.self.model.Usuario;
public interface UsuarioDAO {
public abstract void insert(Usuario usuario) ;
public abstract void update(Usuario usuario) ;
public abstract Usuario get(String login) ;
public abstract void remove(Usuario usuario) ;
public abstract List<Usuario> list() ;
}
2º a implementação dele
package br.com.self.dao;
import java.util.List;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;
import br.com.self.model.Usuario;
import br.com.self.utils.ConnectHibernateFactory;
public class UsuarioDAOImpl implements UsuarioDAO {
private Session session ;
@Override
public void insert(Usuario usuario) {
session = ConnectHibernateFactory.getInstance() ;
Transaction tx = null ;
try {
tx = session.beginTransaction() ;
session.save(usuario) ;
tx.commit() ;
} catch (HibernateException he) {
he.printStackTrace() ;
tx.rollback() ;
} finally {
session.close() ;
}
}
@Override
public void update(Usuario usuario) {
// TODO Auto-generated method stub
}
@Override
public Usuario get(String login) {
// TODO Auto-generated method stub
return null;
}
@Override
public void remove(Usuario usuario) {
// TODO Auto-generated method stub
}
@Override
public List<Usuario> list() {
// TODO Auto-generated method stub
return null;
}
}
a sessionfactory
package br.com.self.utils;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class ConnectHibernateFactory {
private static final SessionFactory sessionFactory ;
private static final ThreadLocal<Session> threadLocal = new ThreadLocal<Session>() ;
static {
try {
sessionFactory = new Configuration().configure("hibernate.cfg.xml").buildSessionFactory() ;
} catch (Throwable t) {
throw new ExceptionInInitializerError(t) ;
}
}
public static Session getInstance() {
Session session = (Session) threadLocal.get() ;
session = sessionFactory.openSession() ;
threadLocal.set(session) ;
return session ;
}
}
O bean
package br.com.self.controller;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;
import br.com.self.dao.UsuarioDAOImpl;
import br.com.self.model.Usuario;
@ManagedBean
@SessionScoped
public class UsuarioController {
private Usuario usuario ;
private DataModel<Usuario> listaUsuarios ;
public DataModel<Usuario> getListaUsuarios() {
List<Usuario> lista = new UsuarioDAOImpl().list() ;
System.out.println("!!!");
listaUsuarios = new ListDataModel<Usuario>(lista) ;
return listaUsuarios ;
}
public Usuario getUsuario() {
return usuario;
}
public void setUsuario(Usuario usuario) {
this.usuario = usuario;
}
}
PS: Não tenho o bean mapeado no faces-config.xml nem absolutamente nada lá, meu web.xml tenho 99% de certeza que não esta causando o problema em todo caso aqui vai ele
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id="WebApp_ID" version="3.0">
<display-name>JSFProject_WithHibernate</display-name>
<welcome-file-list>
<welcome-file>index.jsf</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.jsf</url-pattern>
</servlet-mapping>
<context-param>
<param-name>javax.faces.CONFIG_FILES</param-name>
<param-value>
/WEB-INF/faces-config.xml,
/WEB-INF/beans.xml,
/WEB-INF/navigation.xml,
</param-value>
</context-param>
<context-param>
<description>State saving method: 'client' or 'server' (=default).
See JSF Specification 2.5.2</description>
<param-name>javax.faces.STATE_SAVING_METHOD</param-name>
<param-value>client</param-value>
</context-param>
<context-param>
<param-name>javax.servlet.jsp.jstl.fmt.localizationContext</param-name>
<param-value>resources.application</param-value>
</context-param>
<listener>
<listener-class>com.sun.faces.config.ConfigureListener</listener-class>
</listener>
</web-app>
[quote=tmvolpato]se é só para teste usa os exemplos
que tem la no site do prime
que não utiliza camada dao
apenas cria uma lista no proprio ManagedBean para popular o datable de exemplo[/quote]
Aí você me mata! rsrs, estou fazendo assim pq quero aprender cara! Eu ainda to na era do <%%> e do <%= %> (vergonha né!)
[quote=tmvolpato]se é só para teste usa os exemplos
que tem la no site do prime
que não utiliza camada dao
apenas cria uma lista no proprio ManagedBean para popular o datable de exemplo[/quote]
Site do prime?
Seria o que? primefaces?
Posso estar completamente errado! de uma ou outra forma sei que estarei!
mas enfim, sob meu ponto de vista, o DAOImpl o DAO (interface) o hibernate e etc a + que estiver nas camadas abaixo não estão nem sendo executados pq o tomcat está alegando que a propriedade do bean declarado por (@ManagedBean) não existe
Ja tentei declarar o bean no faces-config.xml mas o erro persistiu
Edição:
Como não estou seguindo nenhum tutorial disponível e fazendo tudo na unha pode ser que eu não tenha percebido algo no código
[quote=eduardo.exs][quote=tmvolpato]se é só para teste usa os exemplos
que tem la no site do prime
que não utiliza camada dao
apenas cria uma lista no proprio ManagedBean para popular o datable de exemplo[/quote]
Site do prime?
Seria o que? primefaces?[/quote]
isso msm mania de fala apenas prime kk
exemplo basico
http://www.codesample.co/tag/primefaces-3-2-jsf2/
ele usa @Named mas vc pode Manter o @ManagedBean mesmo
qlqr duvida posta ai
cara o exemplo que vc citou o cara lá utiliza alguns conceitos que ainda não vi e sinceramente ja vi exemplos de pessoas que fizeram o CRUD sob a mesma perspectiva que estou tentando fazer, posso até ter pecado quanto à engenharia e padrões de projeto mas que ja vi rodando ja vi
@PostConstruct
public void init(){
por exemplo, eu preciso de algo pra inicializar o bean? um construtor ou esse init()?
ou simplesmente chamando a sua propriedade ele adota os procedimentos para isso?
[quote=eduardo.exs]cara o exemplo que vc citou o cara lá utiliza alguns conceitos que ainda não vi e sinceramente ja vi exemplos de pessoas que fizeram o CRUD sob a mesma perspectiva que estou tentando fazer, posso até ter pecado quanto à engenharia e padrões de projeto mas que ja vi rodando ja vi
@PostConstruct
public void init(){
por exemplo, eu preciso de algo pra inicializar o bean? um construtor ou esse init()?
ou simplesmente chamando a sua propriedade ele adota os procedimentos para isso?[/quote]
Ele fez isso para que lista seja carregada com os valores passados
não precisa fazer isso, só qdo vc quer que certos dados seja carregado ao inicializar o bean
é o nome mais usado para esse nome de método
mas vc pode colocar outro seguindo o padrao
O que eu preciso é apenas “conseguir” fazer o xhtml colocar os dados na dataTable que vieram do hibernate…
tanto que neste teste que fiz não cheguei a “terminar” a dataTable, apenas gostaria de conferir se estava funcionando… infelizmente me dei mal…
E ja estou ficando muito chateado cara, pq toda vez que trabalho com o Bean JSF sem persistência, tudo é lindo, tudo funciona etc… inclusive a dataTable
e qdo vou mexer com o hibernate minha vida vira um inferno… infelizmente nos ultimos meses eu resolvi interrar de vez o jdbc senão vou acabar ficando sem emprego 
Fala eduardoexs…
Mude seu index.xhtml para:
<h:dataTable value="#{usuarioController.listaUsuarios}" var="listaUsuarios" >
O “JSF” não achou sua propriedade, no seu caso um getListaUsuarios, por ter um r no .xhtml e no MB não.
Até…
[quote=juliannoms]
Mude seu index.xhtml para:
<h:dataTable value="#{usuarioController.listaUsuarios}" var="listaUsuarios" >
Até…[/quote]
Te devo um café!
E olha que olhei e olhei e olhei de novo… de tanta raiva até cego a gente fica!
Abraços
Tem um outro lance que talvez alguem me ajude de quebra…
eu usava o eclipse Indigo aí fui pro Juno (odiei, pelo menos enquanto não tiver máquina pra rodar ele, achei ele terrívelmente pesado) e agora vortei pro Helios, e meu Helios não completa o código EL (Tem como resolver via plugin ou config ou é da versão msm)?