Fórum Minha página JSF não carrega nada do bean #400178
02/05/2011
0
Meu MB
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | @ManagedBean(value="MostraEsc") @SessionScoped public class MostraEscolaAtiva { private static final int List = 0; private static final int Escola = 0; private DataModel listaEscola; private List< Escola > escolas; public String getTeste() { return teste; } public void setTeste(String teste) { this.teste = teste; } public void handleToggle(ToggleEvent event) { FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Fieldset Toggled", "Visibility:" + event.getVisibility()); FacesContext.getCurrentInstance().addMessage(null, msg); } public void setListaEscola(DataModel listaEscola) { this.listaEscola = listaEscola; } public DataModel getListaEscola(){ List< Escola > lista = new EscolaDaoImp().list(); listaEscola = new ListDataModel(lista); return listaEscola; } public List< Escola > getEscolas() { return escolas; } public void setEscolas(List< Escola > escolas) { this.escolas = escolas; } } |
Meu DAO
1 2 3 4 5 6 | public interface DAO< T > { public void Inserir(T t); public void Deletar(T t); public void Atualizar(T t); public List< T > list(); } |
Minha DaoImp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | public class EscolaDaoImp implements EscolaDAO{ private EntityManager em; @Override public Class< Escola > getEntityType() { return Escola.class; } public List< Escola > list() { Session session = HibernateUtil.getSessionFactory().openSession(); Transaction t = session.beginTransaction(); List lista = session.createQuery("from Escola").list(); t.commit(); return lista; } public EntityManager getEm() { return em; } public void setEm(EntityManager em) { this.em = em; } protected EntityManager getEntityManager() { if (this.em == null) throw new IllegalStateException("Erro"); return this.em; } @PersistenceContext public void setEntityManager(EntityManager em) { this.em = em; } public List< Escola > findAll() { Query query = getEntityManager().createQuery("select distinct e.nome " + "from " + "pessoa p inner join professor f on (p.idpessoa = f.idpessoa) " + "inner join matricula m on (m.idprofessor = f.idprofessor) " + "inner join escola e on (e.idescola = m.idescola)" + "where m.situacao = 'A'"); return (List< Escola >) query.getResultList(); } } |
Minha AbstractDAO
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | public abstract class AbstractDAO< T extends Object> implements DAO< T > { @Override public void Inserir(T obj) { Session session = HibernateUtil.getSessionFactory().openSession(); Transaction t = session.beginTransaction(); session.save(obj); t.commit(); } @Override public void Deletar(T obj) { Session session = HibernateUtil.getSessionFactory().openSession(); Transaction t = session.beginTransaction(); session.delete(obj); t.commit(); } @Override public void Atualizar(T obj) { Session session = HibernateUtil.getSessionFactory().openSession(); Transaction t = session.beginTransaction(); session.update(obj); t.commit(); } @Override public List< T > list() { Session session = HibernateUtil.getSessionFactory().openSession(); Transaction t = session.beginTransaction(); List lista = session.createQuery("from "+getEntityType().getSimpleName()).list(); t.commit(); return lista; } protected abstract Class< T > getEntityType(); } |
Meu Facelet(Somente a parte que eu preciso chamar a lista, ele é muito grande. Acho que é aí q tá a zica)
1 2 3 4 5 6 | < h:form > < p:graphicImage value = "/Images/ico.jpg" /> < p:dataList value = "#{MostraEsc.escolas}" var = "escola" type = "ordered" > #{escola.nome} </ p:dataList > </ h:form > |
Meu Persistence.xml(Eu criei uma pasta na src chamada de META-INF e coloquei ele lá, está correto?)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <? xml version = "1.0" encoding = "UTF-8" ?> xsi:schemaLocation="http://java.sun.com/xml/ns/persistence version = "1.0" > < persistence-unit name = "EscolaDaoImp" -->> Dúvida aqui transaction-type="RESOURCE_LOCAL"> < properties > < property name = "hibernate.connection.driver_class" value = "org.postgresql.Driver" /> < property name = "hibernate.connection.username" value = "postgres" /> < property name = "hibernate.connection.password" value = "123" /> < property name = "hibernate.dialect" value = "org.hibernate.dialect.PostgreSQLDialect" /> < property name = "hibernate.show_sql" value = "true" /> </ properties > </ persistence-unit > </ persistence > |
A porta do PostgreSql é 5435 e ele funciona muito bem, então não é esse o problema

Pjava
Curtir tópico
+ 0Posts
03/05/2011
Robson Teixeira
Seu codigo aparentemente ta certo mas me diz no seu xhtml você tenta chamar o metodo getEscolas() na sua MB que simplismente retornar uma lista de escola será que essa lista está nula ou vazia???? verifique isso e caso o erro persista favor poste o stacktrace todo para que possamos analisar melhor.
att
robson
Gostei + 0
03/05/2011
Davi Costa
public List<Escola> getEscolas() {
// assim vc evita de ir no banco toda vida que fizer algum processo na página
if(escolas == null){
escolas = new EscolaDaoImp().list();
}
return escolas;
}
Seu bean continua com escopo de session, existe realmente essa necessidade?
Sua classe EscolaDaoImp implementa EscolaDAO... mas deveria extender AbstractDAO, senão não faz o menor sentido o AbstractDAO existir se ninguém o usa. Por exemplo lá vc já tem o método list, mas implementou mais uma vez em EscolaDaoImpl, cadê a reutilização, vai fzer isso para todas as entidades?
O ideal é todas suas interfaces estenderem DAO, para forçá-las a ter os métodos naturais do CRUD.
EscolaDAO extends DAO<Escola>...
E suas classes de implementação devem ser
EscolaDAOImpl extends AbstractDAO<Escola> implements EscolaDAO...
Então assim vc nãoprecisa implementar mais os métodos da interface DAO, aí sim vc não ter que repetir código e vai fazer um excelente uso de reusabilidade.
Caso tenha problemas com generics dá uma olhada nakele artigo que havia te passado.
Att Davi
Gostei + 0
03/05/2011
Pjava
Gostei + 0
03/05/2011
Pjava
Gostei + 0
03/05/2011
Davi Costa
Att Davi
Gostei + 0
03/05/2011
Pjava
Mudei a tag para essas aí, e vem agora um erro ao rodar a página:
1 2 3 4 5 6 7 8 | < h:form > < p:graphicImage value = "/Images/ico.jpg" /> < ui:repeat value = "#{MostraEsc.escolas}" var = "info" > < li > < h:inputText value = "#{info.nome}" /> </ li > </ ui:repeat > </ h:form > |
O erro é o abaixo. Caso a minha lista estivesse vazia, acho que a página seria carregada, e no lugar da lista, tudo estaria vazio, certo? Eu rodo é no Tomcat. Não consigo rodar no JBoss. Sempre dá erro de: Esse programa não exibir a página WEB.
Abaixo o listado no Stack Trace
java.lang.IllegalArgumentException: null source at java.util.EventObject.<init>(Unknown Source) at javax.faces.event.SystemEvent.<init>(SystemEvent.java:67) at javax.faces.event.ComponentSystemEvent.<init>(ComponentSystemEvent.java:69) at javax.faces.event.PostRestoreStateEvent.<init>(PostRestoreStateEvent.java:69) at com.sun.faces.lifecycle.RestoreViewPhase.deliverPostRestoreStateEvent(RestoreViewPhase.java:256) at com.sun.faces.lifecycle.RestoreViewPhase.execute(RestoreViewPhase.java:245) at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:97) at com.sun.faces.lifecycle.RestoreViewPhase.doPhase(RestoreViewPhase.java:107) at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:114) at javax.faces.webapp.FacesServlet.service(FacesServlet.java:308) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:164) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:462) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100) at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:562) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:395) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:250) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:188) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:166) at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:302) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at java.lang.Thread.run(Unknown Source)
Gostei + 0
03/05/2011
Pjava
- Component Tree
+- Scoped Variables Request Parameters Name Value None View Attributes Name Value None Request Attributes Name Value None Flash Attributes Name Value None Session Attributes Name Value None Application Attributes Name Value csfcff com.sun.faces.context.flash.ELFlash@c69d0a 03/05/2011 09:54:22 - Generated by Mojarra/Facelets
Gostei + 0
03/05/2011
Davi Costa
vc coloca o break point e passa o mouse sobre a variável e vê se ela tá nula ou não..
Att davi
Gostei + 0
03/05/2011
Pjava
Gostei + 0
03/05/2011
Davi Costa
Att Davi
Gostei + 0
03/05/2011
Pjava
Gostei + 0
03/05/2011
Davi Costa
Coloca um break no getEscolas.. e na camada de negócio também, lembra que tem um if no getEscolas..... para verificar se ele está null... só uma pergunta em nehum momento vc instancio ele não né.. com new algumacoisa no construtor do bean?
Att davi
Gostei + 0
03/05/2011
Pjava
1 2 3 4 5 6 | public List< Escola > getEscolas() { if(escolas == null){ escolas = new EscolaDaoImp().findAll(); } return escolas; } |
Sói uma coisa. Eu não consigo fazer rodar no JBoss. Estou usando o Tomcat e será que o Tomcat tem suporte pra tudo isso? Meu JBoss não funciona mesmo. Acho que o JBoss 6(Meu) tá bugado, mas não sei como realmente saber se tá ou não.
Gostei + 0
03/05/2011
Davi Costa
Mas aí ainda não está funcionando o debug?
Tá subindo pelo eclipse em modo debug?
Att Davi
Gostei + 0
03/05/2011
Davi Costa
Daí vemos se estão vindo realmente escola dessa consulta.
daí é só ver no console, o que imprimi, coloca essa linha depois do if
Att Davi
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)