JSF: Aonde estou errando?

21 respostas
Morpheus_Urubu

Pessoal, estou tentando aprender JSF, mas ta osso, principalmente pela falta de material na internet, diferente do Hibernate por exemplo.

Vamos ao problema: Apenas para fins didaticos, estou criando uma pagina de login, entao eu criei um link para cadastrar usuarios logo na pagina principal, para chamar outra pagina, no caso cadUsuario.jsp, porem quando esta página e carregada, aparece um erro na linha do meu cadUsuario.jsp . Onde estou errando ??? Alguem poderia me ajudar ??

Obrigado.

Index.jsp
<f:view>
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
            <title>NetBuilder - Autenticação</title>
        </head>
        <body>
            
            <h1><h:outputText value="Autenticação" /></h1>
            <h:form>
                <h:inputText value="#{usuario.login}" />
                <h:inputSecret value="#{usuario.senha}" />
                <h:commandButton action="#{usuarioDAO.logar}" />
                <h:outputLink value="cadUsuario.jsp">
                    <f:verbatim>Cadastrar</f:verbatim>
                </h:outputLink>
               
            </h:form>



        </body>
    </html>
</f:view>

cadUsuario.jsp

<f:view>
    <html>
        <head>
           <title>NetBuilder - Cadastro de Usuário</title>
        </head>
        <body>
            <h1>Cadastrar Usuario</h1>
            <h:form>
                <h:inputText value="#{usuario.login}" />
                <h:inputSecret value="#{usuario.senha}" />
                <h:commandButton action="#{usuarioDAO.inserir}" />
            </h:form>
        </body>
    </html>
</f:view>

Obrigado !

21 Respostas

G

vc precisa declarar as taglibs

<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %> <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
no inicio das jsps

ps: se vc n esta achando material é pq n procurou direito, tem muuuuuuuuuuuuuuuuuuuuuuuuuuuito material

Morpheus_Urubu

Eu declarei as taglibs sim ! eu apenas nao postei aqui o codigo completo.

Index.jsp
<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>

<%@taglib prefix="f" uri="http://java.sun.com/jsf/core"%>
<%@taglib prefix="h" uri="http://java.sun.com/jsf/html"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">

<f:view>
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
            <title>NetBuilder - Autenticação</title>
        </head>
        <body>
            
            <h1><h:outputText value="Autenticação" /></h1>
            <h:form>
                <h:inputText value="#{usuario.login}" />
                <h:inputSecret value="#{usuario.senha}" />
                <h:commandButton action="#{usuarioDAO.logar}" />
                <h:outputLink value="cadUsuario.jsp">
                    <f:verbatim>Cadastrar</f:verbatim>
                </h:outputLink>
               
            </h:form>



        </body>
    </html>
</f:view>
cadUsuario.jsp
<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>

<%@taglib prefix="f" uri="http://java.sun.com/jsf/core"%>
<%@taglib prefix="h" uri="http://java.sun.com/jsf/html"%>


<html>
    <body>
        <f:view>
            <h1>Cadastrar Usuario</h1>
            <h:form>
                <h:inputText value="#{usuario.login}" />
                <h:inputSecret value="#{usuario.senha}" />
                <h:commandButton action="#{usuarioDAO.inserir}" />
            </h:form>
        </f:view>
    </body>
</html>

E sobre material, eu achei bastante tutorial, porem nao achei uma apostila, algo que teorizasse mais JSF. Obrigado

Morpheus_Urubu

Eis o erro

org.apache.jasper.JasperException: An exception occurred processing JSP page /cadUsuario.jsp at line 10

7: 
8: <html>
9:     <body>
10:         <f:view>
11:             <h1>Cadastrar Usuario</h1>
12:             <h:form>
13:                 <h:inputText value="#{usuario.login}" />
G

aaaaaaaaaaaaaaaaaa bom hehe

procura pelo livro core java server faces do david geary/ cay horstmann

é meio antigo, mas é bem instrutivo

qnto ao seu problema, ta configurado certo ? posta ai seus xmls d configuração …

Morpheus_Urubu

faces-config.xml

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

<managed-bean>
   <managed-bean-name>usuario</managed-bean-name>
   <managed-bean-class>br.com.wmsolucoes.netbuilder.entidade.Usuario</managed-bean-class>
   <managed-bean-scope>session</managed-bean-scope>
</managed-bean>

<managed-bean>
   <managed-bean-name>usuarioDAO</managed-bean-name>
   <managed-bean-class>br.com.wmsolucoes.netbuilder.persistencia.UsuarioDAO</managed-bean-class>
   <managed-bean-scope>session</managed-bean-scope>
</managed-bean>
<managed-bean>
    <managed-bean-name>SessionBean1</managed-bean-name>
    <managed-bean-class>appnetbuilder.SessionBean1</managed-bean-class>
    <managed-bean-scope>session</managed-bean-scope>
</managed-bean>
<managed-bean>
    <managed-bean-name>ApplicationBean1</managed-bean-name>
    <managed-bean-class>appnetbuilder.ApplicationBean1</managed-bean-class>
    <managed-bean-scope>application</managed-bean-scope>
</managed-bean>
<managed-bean>
    <managed-bean-name>RequestBean1</managed-bean-name>
    <managed-bean-class>appnetbuilder.RequestBean1</managed-bean-class>
    <managed-bean-scope>request</managed-bean-scope>
</managed-bean>

web.xml

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


com.sun.faces.verifyObjects
false


com.sun.faces.validateXml
true


javax.faces.STATE_SAVING_METHOD
client


UploadFilter
com.sun.webui.jsf.util.UploadFilter

O tamanho máximo de carregamento permitido em bytes. Caso seja definido com um valor negativo, não há máximo. O valor padrão é 1000000.
maxSize
1000000


O tamanho (em bytes) de um arquivo carregado que, se for excedido, fará com que o arquivo seja gravado diretamente no disco em vez de armazenado na memória. Arquivos menores ou iguais a esse tamanho serão armazenados na memória. O valor padrão é 4096.
sizeThreshold
4096



UploadFilter
Faces Servlet


Faces Servlet
javax.faces.webapp.FacesServlet
1


ExceptionHandlerServlet
com.sun.errorhandler.ExceptionHandler

errorHost
localhost


errorPort
24444



ThemeServlet
com.sun.webui.theme.ThemeServlet


Faces Servlet
/faces/*

<session-config>
    <session-timeout>
        30
    </session-timeout>
</session-config>
<welcome-file-list>
       <welcome-file>faces/index.jsp</welcome-file>
</welcome-file-list>

</web-app></blockquote>
D

Não tive mta experiência com JSF… mais pelo que vi vc declarou um <f:view> dentro do bloco e outro Fora
Não sei se tem alguma coisa a ver mais dá uma olhada!!

Morpheus_Urubu

Nem, os dois estao declarados fora, seguindo a estrutura <f:view>…
Mas eu ja tentei inverter a ordem, <f:view> e nada !

a tag <f:view> e necessaria para identificar que se trata de uma pagina JSF, certo ? Nao entendo pq o erro aponta sempre para esta Tag

R

Não conheço muito mas. as taglibs não teriam que ficar dentro da tag html?

Morpheus_Urubu

Pois eh, como eu tinha dito anteriormente, eu tentei colocar todas as tags da seguinte forma <f:view>, porem o erro continua o mesmo…

Vou tentar remontar um projeto IDENTICO a de um tutorial aqui, pra ver se eu descubro num step-by-step onde eu posso estar errando… fazer o que, grana ta curta pra comprar um livro ! hahahahaha Se alguem souber do que se trata o erro, por favor me ajudem !

R

Tente desta forma:

<%@page contentType="text/html"%>  
<%@page pageEncoding="UTF-8"%>  
  
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"  
"http://www.w3.org/TR/html4/loose.dtd">  

<html> 
//tente coloca-las aqui
<%@taglib prefix="f" uri="http://java.sun.com/jsf/core"%>  
<%@taglib prefix="h" uri="http://java.sun.com/jsf/html"%>  
   
        <head>  
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
            <title>NetBuilder - Autenticação</title>  
        </head>  
        <body>  
          <f:view>               
            <h1><h:outputText value="Autenticação" /></h1>  
            <h:form>  
                <h:inputText value="#{usuario.login}" />  
                <h:inputSecret value="#{usuario.senha}" />  
                <h:commandButton action="#{usuarioDAO.logar}" />  
                <h:outputLink value="cadUsuario.jsp">  
                    <f:verbatim>Cadastrar</f:verbatim>  
                </h:outputLink>    
            </h:form>  
           </f:view>  
        </body>  
    </html>
Morpheus_Urubu

Infelizmente negativo, o problema persiste =/

rogeriuslima

Cara, vc tá usando o tomcat?
Ele tem umas frescuras que agente tem que resolver pra usar jsf com ele.
Vc não postou todo o stack trace do erro, mais ele deve ser isso:

java.lang.RuntimeException: Cannot find FacesContext

Dá uma olhada neste link:

http://www.roseindia.net/jsf/jsf1.2/jsf-1.2-tomcat-6.shtml

Ou simplesmente muda pro glassfish… :stuck_out_tongue:

Se vc quiser eu posso disponibilizar alguns livros em pdf (em ingles) em algum servidor.

Boa sorte

Morpheus_Urubu

Sim, eu to usando o tomcat !! Vou ver agora cara, Deus queria que seja !

Morpheus_Urubu

Mudei meu servidor para o Glassfish V2, porem, nada !!! Ja nao sei mais o que fazer. Será que o problema pode estar no Netbeans 6.5 ?

rogeriuslima

Cara, posta todo o texto do erro que ocorre.

gcouti

Olá diegocharles ,

Eu tive muitos problemas para configurar o tomcat inicialmente, e um dos problemas que eu tive foi um bem parecido com o seu. Eu lembro que eu resolvi essa questão de TLDs inserindo essas tags no web.xml . Verifique se inserindo isso você resolve seu problema:

<taglib>
        <taglib-uri>http://java.sun.com/jsf/facelets</taglib-uri>
        <taglib-location>/META-INF/jsf_core.tld</taglib-location>
    </taglib>
    <taglib>
        <taglib-uri>http://java.sun.com/jsf/html</taglib-uri>
        <taglib-location>/META-INF/html_basic.tld</taglib-location>
    </taglib>

Tomara que de certo, por que essa parte de configurar a aplicação é muito chata!!

Abração

R

Cara, como o roger falou, você deve estar recebendo esse problema mesmo:

java.lang.RuntimeException: Cannot find FacesContext

Isso deve-se ao fato de sua página inicial ser um JSP contendo a tag <f:view> indicando ser uma página contendo tags JSF. Infelizmente não sei dizer porque isso ocorre, mas você pode resolver isso criando uma página simples apenas para um redirect para sua página inicial, contornando esse problema do FacesContext.

pode fazer assim por exemplo:

<jsp:forward page="faces/index.jsp"></jsp:forward>

Isso irá inicializar o FacesContext (acho que é isso) e sua página irá funcionar normalmente.

Todos os meus projetos JSF tenho configurados dessa forma e já fiz alguns testes e dessa forma funciona perfeitamente. Falta ainda achar uma justificativa técnica para esse problema/solução, e caso encontre compartilharei com a comunidade.

Abraço!

edivandecastro

pessoal estou enfrentando esse mesmo problema, estou tentando criar uma aplicação de hello world! com JSF mas estou apanhando a uma semana. diegocharles vc consequio resolver o problema com a dica do amigo acima, estou tentando mais não estou conseguindo.

R

Edivan,

está usando qual AppServer? Tomcat, JBoss, Glassfish? Eu uso Glassfish V2. Muito bom por sinal. A versão do Netbeans que estou usando é a 6.5. Caso esteja utilizando o Netbeans, quando iniciar um projeto JSF, ele já monta uma estrutura básica, com um “hello world” padrão. Tente criar um projeto nele e comparar com o que tem feito. Foi assim que resolvi esses problemas de “Cannot find FacesContext”. Não progredindo, é só voltar aqui e pedir ajuda denovo!

Abraço!

edivandecastro

raul eu usei o netbeans e deu certo usando o servidores GlassFish, Tomcat e JBoss. copie os arquivos web.xml e paginas jsfs para o eclipse e fiz os mesmos teste.
o qual só funcionol com o tomcat. agora estou estudando pq no eclipse não funciona executar a aplicaçõa no JBoss e no GlassFish. isto tb esta acontecendo com uma aplicação que já tenho pronta quando tento executar em um servidor diferente do tomcat a aplicação não funciona.

R

O problema que está encontrando utilizando Eclipse e fazendo deploy no GF ou JB é o mesmo de antes?

Criado 13 de abril de 2009
Ultima resposta 2 de dez. de 2009
Respostas 21
Participantes 8