Fórum Minha página JSF não carrega nada do bean #400178

02/05/2011

0

Eu resolvi criar um novo post, devido ao anterior está demasiadamente grande e o assunto é quase o mesmo, mas não totalmente. O que passa é que eu não consigo carregar nada que vem de meu bean em uma página jsf(XHTML). Fiz um método simples, e mesmo assim não carreguei nada. Aí vejo que o erro está comigo,óbvio, mas não consegui saber onde específicamente. Por isso peço a ajuda de vocês. Ainda estou no trampo dada a urgência de terminar isso. Vou colocar todos os meus arquivois envolvidos. Acho que o método está errado ou a chamada na página.
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"?> 
                       http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd
    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.connection.url" value="jdbc:postgresql://localhost:5435/Testel" /> 
            <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

Pjava

Responder

Posts

03/05/2011

Robson Teixeira

Olá Pjava
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
Responder

Gostei + 0

03/05/2011

Davi Costa

Altere o método getEscolas(), para a seguinte implementação:


    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



Responder

Gostei + 0

03/05/2011

Pjava

Davi, ele está assim, porque preciso mandar alguma coisa ainda hoje, ou seja, listar essas escolas no XHTML. Como usamos scrum, preciso dessa pontuação inicial, aí só depois, terei tempo para alterar isso. Tenho medo de começar a alterar e não conseguir entender e terminar em tempo. Hoje é meu DeadLine. Então, só quero listar essas escolas, só pra eles verem o resultado, nada mais. Depois, terei mais 12 dias para terminar o resto, mas tudo semelhante a isso, tipo, agora pegar o professor logado, pegar as matérias dele, as salas, então tudo semelhante e esse procedimento. Se eu entender bem isso, eu consigo fazer os demais e terminar minha Sprint. Então, esse é minha situação aqui. Só preciso listar as escolas.
Responder

Gostei + 0

03/05/2011

Pjava

Ainda acho que a lista está vazia. Tem como debugar, de forma que eu pegue o que vem na lista?Só assim saberei se a lista está sendo preenchida corretamente ou não. Porque alterei tudo aqui e ainda assim não carrego nada na lista, nada mesmo.
Responder

Gostei + 0

03/05/2011

Davi Costa

Tem como debugar sim, pesquisa como debugar eclipse.. e só mais uma dúvida, existe realmente alguma escola nessa condição no banco?

Att Davi
Responder

Gostei + 0

03/05/2011

Pjava

Sim, no banco tem 4 escolas cadastradas e na condição "A" serão listadas 2 escolas.
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)


Responder

Gostei + 0

03/05/2011

Pjava

Mais essas listagens de Component Tree e Scopped Variables
- 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
Responder

Gostei + 0

03/05/2011

Davi Costa

E melhor debugar na classe java..
vc coloca o break point e passa o mouse sobre a variável e vê se ela tá nula ou não..


Att davi
Responder

Gostei + 0

03/05/2011

Pjava

No lugar de inputText eu troquei para outputText 
Responder

Gostei + 0

03/05/2011

Davi Costa

Só um toke nós não debugamos xhtml, mas sim classes java.


Att Davi
Responder

Gostei + 0

03/05/2011

Pjava

Sim, isso tá ok comigo. Apenas quiz dizer que eu coloquei os Breaks nos Java e quando subi a jsf, penso eu que no ponto em ela chama aquela classe, deveria abrir o debug naquele ponto(na classe), certo? Se isso for realment, comigo não tá parando naquele ponto, tipo: No meu MB eu coloco um Break num método. Quando o jsf que chamar aquele método passar por aquela chamada, deveria abrir o meu MB no ponto em eu coloquei, certo?
Responder

Gostei + 0

03/05/2011

Davi Costa

Subiu em modo debug?., pois pelo que relatou está ok.
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
Responder

Gostei + 0

03/05/2011

Pjava

Só assim, eu estanciei ele
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.
Responder

Gostei + 0

03/05/2011

Davi Costa

o 7 tem sim.
Mas aí ainda não está funcionando o debug?
Tá subindo pelo eclipse em modo debug?

Att Davi
Responder

Gostei + 0

03/05/2011

Davi Costa

Caso ainda esteja com um pouco de dificuldade no debug, que tal dar um System.out.println(escolas.size());
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
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar