Minha página jsf não mostra nada

24 respostas
P
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
@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
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
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
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)
<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?)
<?xml version="1.0" encoding="UTF-8"?>  
<persistence xmlns="http://java.sun.com/xml/ns/persistence"  
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence               
                       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

24 Respostas

M

Não sei se o @ManagedBean funciona com value, coloca @ManagedBean(name=“MostraEsc”)

P

Ele dá erro. [color=red]The attribute name is undefined for the annotation type ManagedBean.[/color]. Esse é o erro que dá e ele sugere value

M

Cara, então configura o managed bean no faces-config. Uso o @ManagedBean com name="" e funciona perfeitamente… Está configurado pra jsf 2.0 mesmo?

P

de onde vc ta importando o managedBean ??
os imports certos seriam :

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

ed: se for esse:

import javax.annotation.ManagedBean;

ta errado ai não funciona mesmo

P

Realmente estava erra e mudei para import javax.faces.bean.ManagedBean; Estava com annotation e agora belê, mas ainda não funfei. Gostaria de debugar isso, para saber se a minha lista está ou carregada, mas não sei como fazer de uma JSF para códigos java, entende? Como faço esse debug. Fiz assim: Marquei os breaks points, dei um F11 e rodei a página em modo debug, mas não parou em ponto nenhum. Foi direto e só carrega a imagem.

P

se vc usa o netbeans marca e usa o depurador, ai quando vc executar ele vai debugar o código e te mostrar la em baixo no netbeans, ou vc pode em qlq ação do jsf colocar para imprimir os valores, exemplo

getList(){
  for(){
  Imprime minha lista 
}

return list
P

Uso Eclipse Helios

P

tenta assim

public List<Escola> getEscolas() {  
        for(int x = 0; x<escolas.size();x++){
           System.out.println(escolas.get(x));
        }
        return escolas;  
    }

Uma maneira drástica de fazer mas acho que funciona para ver se está passando alguma coisa.

P

Fiz assim e não funfou.

public List&lt;Escola&gt; getEscolas() { if(escolas == null){ escolas = new EscolaDaoImp().findAll(); } return escolas; }
Esse é meu método findAll()

public List&lt;Escola&gt; 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&lt;Escola&gt;) query.getResultList(); }

P

No output do server aparece o sql do hibernate fazendo um select ??

tente assim:

public List<Escola> getEscolas() {  
            if(escolas.size()==0){  
                escolas = new EscolaDaoImp().findAll();  
           }  
           return escolas;  
        }
P

Polverini, vou tentar sim, mas me diga uma coisa por favor. Eu não consigo rodar nada no meu JBoss. Eu estou rodanmdo isso no Tomcat. Será que o Tom dá suporte a isso(jsf 2.0)? E tem mais, agora me ocorreu que a lista pode estar vazia, ainda que tenha dados lá. Eu cadastrei 4 escolas para e nesse select sobe 2. Não consegui debugar nada. No meu JBoss dá sempre o erro de que Não é possível exibir essa página.

C

TomCat dá suporte ao JSF 2.0

Para você saber se sua lista tem valor…primeiro teste o select no SGBD…Se trouxer é pq existe registro…

veja se tem registro e posta aqui…

P

isso tá ok. O meu problema é só com o Java. Fora, tudo tá OK, banco, rtegistros e etc… O problema está do Java para o XHTML, passando pelo Hibernate e Tomcat.

C

Então vamos por partes…
Verifica no console se query foi executada e posta aqui…
Como você disse que não está conseguindo debugar, usa sysout para ver se ele esta passando os objetos…

Veja essas duas coisas e poste aqui…

Vou te mandar um exemplo de uma página com primefaces que é bem facil…para exibir sua lista…

P

Caputo, me explica então uma coisa. Para eu colocar um System.out.println, eu devo chamar como? Eu hoje faço assim: Dou um direito na jsf(XHTML), aí escolho Run As > Run On Server > Escolho o server(no meu caso, Tomcat). Aí ele chama a página jsf. É aí que não vejo minha lista. Agora eu coloquei esse S.o.p para imprimir, mas dessa forma, em modo web, no console só o log do container.

P

tente assim

public List<Escola> getEscolas() {  
        
	escolas = new EscolaDaoImp().findAll();  
	for(int x = 0; x<escolas.size();x++){  
		System.out.println(escolas.get(x));  
	}
	return escolas;  
}

Isso faz com que ele imprima a classe carregada na lista, caso vc tenha sobrescrito o metodo toString ele imprime os valores que la estão, assim vc ve onde está o problema se é no hibernate (na consulta) ou no primefaces (view)

C

Isso mesmo…no log do console…
Você roda com o tomcat…mesmo…aí qdo executar e não aparecer a lista você olha la no log do console…
Ele imprime os objetos e a query q o hibernate executou?
Ou aparece algum erro??

P
Esse é o log do container:

[list]03/05/2011 14:36:35 org.apache.catalina.core.AprLifecycleListener init

INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: C:\Program Files (x86)\Java\jre6\bin;.;C:\Windows\Sun\Java\bin;C:\Windows\system32;C:\Windows;C:/Program Files (x86)/Java/jre6/bin/client;C:/Program Files (x86)/Java/jre6/bin;C:/Program Files (x86)/Java/jre6/lib/i386;C:\Program Files\Common Files\Microsoft Shared\Windows Live;C:\Program Files (x86)\Common Files\Microsoft Shared\Windows Live;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0;c:\Program Files\WIDCOMM\Bluetooth Software;c:\Program Files\WIDCOMM\Bluetooth Software\syswow64;;C:\Program Files\Dell\DW WLAN Card;C:\Program Files (x86)\Windows Live\Shared;C:\Program Files (x86)\Common Files\Roxio Shared\DLLShared;C:\Program Files (x86)\Common Files\Roxio Shared\OEM\DLLShared;C:\Program Files (x86)\Common Files\Roxio Shared\OEM\DLLShared;C:\Program Files (x86)\Common Files\Roxio Shared\OEM\12.0\DLLShared;C:\Program Files (x86)\Roxio\OEM\AudioCore;C:\Desenvolvimento\eclipse;

03/05/2011 14:36:36 org.apache.tomcat.util.digester.SetPropertiesRule begin

AVISO: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property source to org.eclipse.jst.jee.server:MosaicoDigital did not find a matching property.

03/05/2011 14:36:36 org.apache.tomcat.util.digester.SetPropertiesRule begin

AVISO: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property source to org.eclipse.jst.jee.server:Prime did not find a matching property.

03/05/2011 14:36:36 org.apache.tomcat.util.digester.SetPropertiesRule begin

AVISO: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property source to org.eclipse.jst.jee.server:rich_editor_facelets did not find a matching property.

03/05/2011 14:36:36 org.apache.tomcat.util.digester.SetPropertiesRule begin

AVISO: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property source to org.eclipse.jst.jee.server:Prim did not find a matching property.

03/05/2011 14:36:36 org.apache.coyote.AbstractProtocolHandler init

INFO: Initializing ProtocolHandler [“http-bio-8080”]

03/05/2011 14:36:36 org.apache.coyote.AbstractProtocolHandler init

INFO: Initializing ProtocolHandler [“ajp-bio-8009”]

03/05/2011 14:36:36 org.apache.catalina.startup.Catalina load

INFO: Initialization processed in 543 ms

03/05/2011 14:36:36 org.apache.catalina.core.StandardService startInternal

INFO: Starting service Catalina

03/05/2011 14:36:36 org.apache.catalina.core.StandardEngine startInternal

INFO: Starting Servlet Engine: Apache Tomcat/7.0.12

03/05/2011 14:36:39 com.sun.faces.config.ConfigureListener contextInitialized

INFO: Inicializando Mojarra 2.0.3 (FCS b03) para o contexto /MosaicoDigital

03/05/2011 14:36:39 com.sun.faces.spi.InjectionProviderFactory createInstance

INFO: JSF1048: Anotações PostConstruct/PreDestroy presentes.  Os métodos ManagedBeans marcados com essas anotações informarão as anotações processadas.

03/05/2011 14:36:40 com.sun.faces.config.ConfigureListener contextInitialized

INFO: Inicializando Mojarra 2.0.3 (FCS b03) para o contexto /Prime

03/05/2011 14:36:40 com.sun.faces.spi.InjectionProviderFactory createInstance

INFO: JSF1048: Anotações PostConstruct/PreDestroy presentes.  Os métodos ManagedBeans marcados com essas anotações informarão as anotações processadas.

03/05/2011 14:36:41 org.primefaces.webapp.PostConstructApplicationEventListener processEvent

INFO: Running on PrimeFaces 3.0.M1

03/05/2011 14:36:41 com.sun.faces.config.ConfigureListener$WebConfigResourceMonitor$Monitor <init>

INFO: Monitoring jndi:/localhost/Prime/WEB-INF/faces-config.xml for modifications

03/05/2011 14:36:41 org.apache.catalina.core.ApplicationContext log

INFO: Marking servlet Faces Servlet as unavailable

03/05/2011 14:36:41 org.apache.catalina.core.StandardContext loadOnStartup

GRAVE: Servlet /Prim threw load() exception

java.lang.ClassNotFoundException: javax.faces.webapp.FacesServlet

at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1676)

at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1521)

at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:415)

at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:397)

at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:118)

at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1062)

at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1010)

at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4935)

at org.apache.catalina.core.StandardContext$3.call(StandardContext.java:5262)

at org.apache.catalina.core.StandardContext$3.call(StandardContext.java:5257)

at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)

at java.util.concurrent.FutureTask.run(Unknown Source)

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)

03/05/2011 14:36:41 org.apache.catalina.loader.WebappClassLoader validateJarFile

INFO: validateJarFile(C:\Desenvolvimento\workspace.metadata.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\rich_editor_facelets\WEB-INF\lib\servlet.jar) - jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class

03/05/2011 14:36:43 org.apache.coyote.AbstractProtocolHandler start

INFO: Starting ProtocolHandler [“http-bio-8080”]

03/05/2011 14:36:43 org.apache.coyote.AbstractProtocolHandler start

INFO: Starting ProtocolHandler [“ajp-bio-8009”]

03/05/2011 14:36:43 org.apache.catalina.startup.Catalina start

INFO: Server startup in 7574 ms[/list]
C

Cara vc tá usando JSF 1.2 ou JSF2.0 ???
Esse erro eh do JSF1.2
parece que você está usando as bibliotecas do JSF 1.2 ou está mapeando elas no web.xml

Por isso o sistema num sobe…

P
Meu web.xml. Eu uso o jsf-api-2.0.3.jar e o mesmo para a impl. No classpath também um cara lá, chamado:facelets-lib.jar.zip e agora q vc falou vi que tem dois primefaces: o 2.2.1.jar e o 3.0M1.jar. Esse ambiente eu praticamenete peguei pronto, fiz algumas alterações, como o prime. Será que pode ser isso?
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;web-app version="2.5" 
         xmlns="http://java.sun.com/xml/ns/javaee" 
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"&gt;

 &lt;display-name&gt;Prime&lt;/display-name&gt;
 
 &lt;welcome-file-list&gt;
 &lt;welcome-file&gt;index.jsf&lt;/welcome-file&gt;
 &lt;welcome-file&gt;Hello.html&lt;/welcome-file&gt;
 &lt;welcome-file&gt;SalaAula.jsf&lt;/welcome-file&gt;
 &lt;/welcome-file-list&gt;
 
 &lt;context-param&gt;
 &lt;param-name&gt;javax.faces.PROJECT_STAGE&lt;/param-name&gt;
 &lt;param-value&gt;Development&lt;/param-value&gt;
 &lt;/context-param&gt;
 &lt;servlet&gt;
 &lt;servlet-name&gt;Resource Servlet&lt;/servlet-name&gt;
 &lt;servlet-class&gt;org.primefaces.resource.ResourceServlet&lt;/servlet-class&gt;
 &lt;/servlet&gt;
 &lt;servlet-mapping&gt;
 &lt;servlet-name&gt;Resource Servlet&lt;/servlet-name&gt;
 &lt;url-pattern&gt;/primefaces_resource/*&lt;/url-pattern&gt;
 &lt;/servlet-mapping&gt;

 &lt;servlet&gt;
 &lt;servlet-name&gt;Faces Servlet&lt;/servlet-name&gt;
 &lt;servlet-class&gt;javax.faces.webapp.FacesServlet&lt;/servlet-class&gt;
 &lt;load-on-startup&gt;1&lt;/load-on-startup&gt;
 &lt;/servlet&gt;
 &lt;servlet-mapping&gt;
 &lt;servlet-name&gt;Faces Servlet&lt;/servlet-name&gt;
 &lt;url-pattern&gt;*.jsf&lt;/url-pattern&gt;
 &lt;/servlet-mapping&gt;
 &lt;session-config&gt;
 &lt;session-timeout&gt;
 30
 &lt;/session-timeout&gt;
 &lt;/session-config&gt;
 
&lt;/web-app&gt;
P

Minha conclusão é que o jsf(XHTML) não está reconhecendo o MB. Vou trabalhar nessa direção.

P

O que passa é que o meu facelet não enxerga o MB. Eu criei um método simples, que me retornasse uma String assim: “Teste” e não consegui rodar no meu facelet. Porem qualquer coisa que não benha do MB, tipo Imagens e alguns textos, que estão em uma pasta dentro do meu projeto, aí o facelet consegue exergar e carregar. Mas do MB nada, nada mesmo.

C

Segue esses 3 links como exemplo que você vai chegar lá…

Att,

P

Eu trabalho junto com um amigo aqui e nós estávamos com o mesmo problema. O que fizemos. Desinstalamos tudo, deletei o eclipse e baixei outro e instalei. Jogamos fora o JBoss e o Tomcat e instalamos o GlassFish 3. Vimos que nosso classpath faltava muita coisa, tipo: Hibernate3.jar, Asm 4.0_RC1.jar e etc… Eram vários que precisamos instalar. Feito isso, mudamos as nossas classes DAO e etc…, tiramos as Annotation dos MB e fizemos por mapeamento no faces-config. Vai ficar grande, vai, mas não temos tempo para estudar outros meios e configurá-los. Isso vai ficar para o próximo projeto. Em face disso, com meu colega funcionou. Eu nesse momento, estou exatamente fazendo essas mudanças, mas acho que é por aí.Ainda não testei. Após o teste posto para dizer a resposta.

Criado 2 de maio de 2011
Ultima resposta 4 de mai. de 2011
Respostas 24
Participantes 4