Ajudinha básica com JSF

Olá amigos, como vão?
Tenho uma aplicação WEB com JSF2, Hibernate e PrimeFaces.
Vejam:

login.xhtml

[code]<?xml version='1.0' encoding='UTF-8' ?>

Identifique-se [/code]

UsuarioManagedBean:

public String validarAcesso() { try { UsuarioDAOImpl usuarioDAOImpl = new UsuarioDAOImpl(); if (usuarioDAOImpl.validarAcesso(this.getLoginUsuario()).isEmpty()) { return "erroAoLogar"; } else { return "sucesso"; } } catch (Exception ex) { ex.printStackTrace(); return "erroAoLogar"; } }

Aí eu fui, e criei por conta um arquivo faces-config.xml. Veajm:

[code]<?xml version="1.0" encoding="UTF-8"?>

<managed-bean>
    <managed-bean-name>usuarioMB</managed-bean-name>
    <managed-bean-class>br.com.tcc.managedBean.UsuarioMB</managed-bean-class>
    <managed-bean-scope>session</managed-bean-scope>
</managed-bean>

<navigation-rule>
    <from-view-id>faces/login.xhtml</from-view-id>
    <navigation-case>
        <from-outcome>logado</from-outcome>
        <to-view-id>faces/novaInstituicao.xhtml</to-view-id>
    </navigation-case>
    <navigation-case>
        <from-outcome>erroAoLogar</from-outcome>
        <to-view-id>faces/login.xhtml</to-view-id>
    </navigation-case>
</navigation-rule>
[/code]

No entanto, quando eu executo a aplicação, a página de login aparece em branco, apenas com o título da página!
O que pode ser o problema?
[]'s

Passa a url que vc está tentando acessar a pagina?

http://localhost:8080/TCC/

Como voce configurou seu web.xml?

Exemplo:

web.xml

<servlet-mapping>
		<servlet-name>Faces Servlet</servlet-name>
		<url-pattern>*.jsf</url-pattern>
</servlet-mapping>

Se no seu web xml estiver assim, como acima. Ao executar ele só irá interpretar o que for com a extensao *.jsf

<welcome-file-list>
		<welcome-file>index.jsf</welcome-file>
	</welcome-file-list>

Logo, quando voce executou a aplicação, se o seu welcome file for diferente de algumacoisa.jsf, ele irá executar na extensao que está no welcome-file.

Provavelmente seu welcome-file esteja como index.xhtml ou index.html ou ainda index.jsp. Mude-o para a configuração que voce colocou no url-pattern.
nomedasuapagina.jsf

Ao executar a aplicação, ele irá procurar por esse arquivo.

No mapeamento vc está indicando, mais um diretorio o “faces” veja: faces/login.xhtml
verifica seu web.xml também.

Vejam:

Creio que essa parte esteja correta.
O que eu não entendo, é porque não aparece nada na tela!

Bom, se esse é seu url pattern. Sua url tem que ser: http:localhost:8080/TCC/faces/nomedapagina.xhtml

vai no seu welcome-file e deixa faces/nomedapagina.xhtml

Ex:

<welcome-file-list>
	<welcome-file>faces/index.jsf</welcome-file>
</welcome-file-list>

<welcome-file-list> <welcome-file>faces/login.xhtml</welcome-file> </welcome-file-list>

Entretanto, o meu welcome-file já estava desse modo.

Muda seu pattern de

para

A estrutura onde se localiza as paginas . xhtml está de acordo como é chamado na url?

Cara, ve isso tbm… voce disse está usando a versão 2 do jsf. entretando, no faces-config. está setado versao 1.2

Muda para:

<faces-config
    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-facesconfig_2_0.xsd"
    version="2.0">

tarlix,
alterei o faces-config, e realmente deu certo. Era apenas a versão.
A página de login aparece.
Porém, o log do Servidor fica apresentando erros sem parar, e quando eu tento logar,
não aparece a tela que deveria vir em seguida!

Quais erros aparecem no log?

java.lang.RuntimeException: com.sun.faces.config.ConfigurationException: java.util.concurrent.ExecutionException: com.sun.faces.config.ConfigurationException: Unable to parse document ‘jndi:/localhost/TCC/WEB-INF/faces-config.xml’: null
at com.sun.faces.config.ConfigureListener.contextInitialized(ConfigureListener.java:290)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4797)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5291)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.manager.ManagerServlet.start(ManagerServlet.java:1256)
at org.apache.catalina.manager.ManagerServlet.doGet(ManagerServlet.java:376)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:108)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:581)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:1852)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:722)

Cara, eu nao posso confirmar isso agora, mas no jsf2 as configurações do ManagedBean são feitas direto na classe

@ManagedBean
@SessionScope
Class

Portanto, remova isso:

 <managed-bean>  
        <managed-bean-name>usuarioMB</managed-bean-name>  
        <managed-bean-class>br.com.tcc.managedBean.UsuarioMB</managed-bean-class>  
        <managed-bean-scope>session</managed-bean-scope>  
    </managed-bean>  
      
    <navigation-rule>  
        <from-view-id>faces/login.xhtml</from-view-id>  
        <navigation-case>  
            <from-outcome>logado</from-outcome>  
            <to-view-id>faces/novaInstituicao.xhtml</to-view-id>  
        </navigation-case>  
        <navigation-case>  
            <from-outcome>erroAoLogar</from-outcome>  
            <to-view-id>faces/login.xhtml</to-view-id>  
        </navigation-case>  
    </navigation-rule>  

E teste de novo, conforme for, vc vai pesquisando o navigation-rule.
Mas o managed bean pode ser por anotação, direto.

tarlix,
eu devo então deletar o arquivo faces-config?

no jsf2 vc pode configurar seus managedBeans tanto o xml quanto por anotação
lembrando que se vc estiver usando a configuração por xml e ao mesmo tempo usando anotação para o mesmo managedBean o xml terá precedência.

agora o que esta parecendo é que tem alguma coisa erra dentro do xml

É que agora tá acontecendo o seguinte:
O NetBeans compila, abre o navegador e a página de login, porém, o log do Apache fica apresentando erros, como se estivesse em um loop.
Aí quando digito o usuário e senha na tela e clico em “Entrar” ,a página some e não direciona para a próxima página.

Ideias do que pode ser?
Não ia bater tanto em cima disso, mas é que é meu TCC rsrs

Valeu galera

usa as anotações do jsf no seu managedBean

e coloca apenas isso no seu faces-config.xml


<?xml version="1.0" encoding="UTF-8"?>
<!-- This file is not required if you don't need any extra configuration. -->
<faces-config version="2.0" 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-facesconfig_2_0.xsd">	
</faces-config>

e vê o que acontece

Tentei fazer isso, deixei só esse trecho do faces-config e mesmo assim não deu certo.
Até porque eu desejo que a aplicação seja direcionada para a tela de login e, se o usuário existir, vá para as outras páginas.
Então, suponho eu, que tirando do faces-config os parâmetros como navigation-case, navigation-rule, etc, ele não irá direcionar as páginas.

Alguma sugestão? =/