Erro JSF

08/06/2009

Boa Tarde, eu estou tentando fazer uma operação para Salvar no Banco de dados , ai está acusando esse erro quando vou submeter :

Apache Tomcat/6.0.18 - Error reportHTTP Status 404 - type Status report message description The requested resource () is not available. Apache Tomcat/6.0.18
Ele nem entra no ClienteManagerBean :

package br.org.shift.managedbean;

import br.org.shift.dao.FactoryDAO;
import br.org.shift.persistencia.Cliente;

public class ClienteManagerBean {

    private Cliente cliente;

    public Cliente getCliente() {
        return cliente;
    }

    public void setCliente(Cliente cliente) {
        this.cliente = cliente;
    }
   
    public String saveCliente(){
       
        try {
            FactoryDAO.getCLIENTE_DAO().save(cliente);
        } catch (Exception e) {
           
            e.printStackTrace();
        }
       
        return "sucesso";
       
    }
}


Meu JSP: que está dentro da pasta:  pages


<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
<%@ 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">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Cadastro de Clientes</title>
</head>
<body>
<f:view>
    <h:form>
        <h:inputText value="#{clienteManagerBean.cliente.nomeCliente}">Nome:</h:inputText>
        <h:inputText value="#{clienteManagerBean.cliente.cpfCnpjCliente}">CPF ou CNPJ</h:inputText>   
        <h:commandButton value="Gravar" action="#{clienteManagerBean.saveCliente}" />
    </h:form>
</f:view>
</body>
</html>
Cristian Mietlicki

Cristian Mietlicki

Curtidas 0

Respostas

Henrique Weissmann

Henrique Weissmann

08/06/2009

Cristian,

estas são algumas das causas que conheço para este erro:

1. A página do JSF não estar disponível no servidor.
   Faça o seguinte teste: acesse a página diretamente pelo browser.

2. O managed bean não está presente no arquivo de configuração do faces.
   Neste caso, você tenta fazer uma requisição, mas como o framework não saberá qual classe chamar, irá disparar um erro 404.
Isto no entanto não está acontecendo na sua página, porque no seu arquivo JSP, os atributos do bean estão na mesma instancia que o método saveCliente

3. Você retorna a string "sucesso" no método saveCliente. Esta string de saída está mapeada no arquivo de configuração do faces? Se não estiver, ele não saberá para onde redirecionar o seu chamado e, consequentemente, irá disparar o erro 404.


GOSTEI 0
Cristian Mietlicki

Cristian Mietlicki

08/06/2009

O problema que não está nem entrando na função saveCliente. esse é meu arquivo xml:



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

<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_1_2.xsd"
    version="1.2">
    <managed-bean>
        <managed-bean-name>datasSuporteManagedBean</managed-bean-name>
        <managed-bean-class>br.org.shift.managedbean.DatasSuporteManagedBean</managed-bean-class>
        <managed-bean-scope>session</managed-bean-scope>
    </managed-bean>
    <managed-bean>
        <managed-bean-name>clienteManagerBean</managed-bean-name>
        <managed-bean-class>br.org.shift.managedbean.ClienteManagerBean</managed-bean-class>
        <managed-bean-scope>session</managed-bean-scope>
    </managed-bean>
    <navigation-rule>
        <display-name>index</display-name>
        <from-view-id>/index.jsp</from-view-id>
        <navigation-case>
            <from-outcome>teste</from-outcome>
            <to-view-id>/WEB-INF/pages/clientes.jsp</to-view-id>
        </navigation-case>
    </navigation-rule>
    <navigation-rule>
        <display-name>WEB-INF/pages/clientes</display-name>
        <from-view-id>/WEB-INF/pages/clientes.jsp</from-view-id>
        <navigation-case>
            <from-outcome>sucesso</from-outcome>
            <to-view-id>/principal.jsp</to-view-id>
        </navigation-case>
    </navigation-rule>

</faces-config>

GOSTEI 0
Cristian Mietlicki

Cristian Mietlicki

08/06/2009

Tentando acessar o caminho direto ele não aceita, tambem. Quando acesso a primeria vez de outra tela ai abre a pagina cliente, mas pelo link direto não vai.
GOSTEI 0
Henrique Weissmann

Henrique Weissmann

08/06/2009

Cristian,

Lembre-se disto:
"Tentando acessar o caminho direto ele não aceita, tambem. Quando acesso a primeria vez de outra tela ai abre a pagina cliente, mas pelo link direto não vai."
Lembre-se de incluir também o prefixo "faces" na sua página inicial para fazer o teste.
Algo como
http://localhost:8080/faces/principal.jsp

Agora, com relação ao seu arquivo de configuração: se não me engano, a tag <display-name> é desnecessária neste arquivo.
Remova-a do arquivo e em seguida tente novamente.
Digo isto porque dependendo da versão dos jars que você estiver utilizando pode haver algum problema no momento de parseamento deste recurso.

Outro ponto importante: verifique o log de saída do seu servidor de aplicações quando a sua aplicação for iniciada. Se possível, poste-o aqui para que eu possa analisá-lo em conjunto com você.
GOSTEI 0
Cristian Mietlicki

Cristian Mietlicki

08/06/2009

Esse problema ja tinha resolvido e está dando esse erro agora: ele mostra que o cliente , está nulo. não entendi pq.


 08/06/2009 15:44:28 com.sun.faces.lifecycle.ProcessValidationsPhase execute
WARNING: /pages/clientes.jsp(13,2) '#{clienteManagerBean.cliente.nomeCliente}' Target Unreachable, 'cliente' returned null
org.apache.jasper.el.JspPropertyNotFoundException: /pages/clientes.jsp(13,2) '#{clienteManagerBean.cliente.nomeCliente}' Target Unreachable, 'cliente' returned null
    at org.apache.jasper.el.JspValueExpression.getType(JspValueExpression.java:61)
    at com.sun.faces.renderkit.html_basic.HtmlBasicInputRenderer.getConvertedValue(HtmlBasicInputRenderer.java:92)
    at javax.faces.component.UIInput.getConvertedValue(UIInput.java:942)
    at javax.faces.component.UIInput.validate(UIInput.java:868)
    at javax.faces.component.UIInput.executeValidate(UIInput.java:1072)
    at javax.faces.component.UIInput.processValidators(UIInput.java:672)
    at javax.faces.component.UIForm.processValidators(UIForm.java:235)
    at org.ajax4jsf.component.AjaxViewRoot$3.invokeContextCallback(AjaxViewRoot.java:439)
    at org.ajax4jsf.component.AjaxViewRoot.processPhase(AjaxViewRoot.java:238)
    at org.ajax4jsf.component.AjaxViewRoot.processValidators(AjaxViewRoot.java:455)
    at com.sun.faces.lifecycle.ProcessValidationsPhase.execute(ProcessValidationsPhase.java:76)
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:265)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
    at java.lang.Thread.run(Thread.java:619)
08/06/2009 15:44:28 com.sun.faces.lifecycle.Phase doPhase
SEVERE: JSF1054: (Phase ID: PROCESS_VALIDATIONS 3, View ID: /pages/clientes.jsp) Exception thrown during phase execution: javax.faces.event.PhaseEvent[source=com.sun.faces.lifecycle.LifecycleImpl@e97281]
08/06/2009 15:44:28 org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet Faces Servlet threw exception
org.apache.jasper.el.JspPropertyNotFoundException: /pages/clientes.jsp(13,2) '#{clienteManagerBean.cliente.nomeCliente}' Target Unreachable, 'cliente' returned null
    at org.apache.jasper.el.JspValueExpression.getType(JspValueExpression.java:61)
    at com.sun.faces.renderkit.html_basic.HtmlBasicInputRenderer.getConvertedValue(HtmlBasicInputRenderer.java:92)
    at javax.faces.component.UIInput.getConvertedValue(UIInput.java:942)
    at javax.faces.component.UIInput.validate(UIInput.java:868)
    at javax.faces.component.UIInput.executeValidate(UIInput.java:1072)
    at javax.faces.component.UIInput.processValidators(UIInput.java:672)
    at javax.faces.component.UIForm.processValidators(UIForm.java:235)
    at org.ajax4jsf.component.AjaxViewRoot$3.invokeContextCallback(AjaxViewRoot.java:439)
    at org.ajax4jsf.component.AjaxViewRoot.processPhase(AjaxViewRoot.java:238)
    at org.ajax4jsf.component.AjaxViewRoot.processValidators(AjaxViewRoot.java:455)
    at com.sun.faces.lifecycle.ProcessValidationsPhase.execute(ProcessValidationsPhase.java:76)
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:265)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
    at java.lang.Thread.run(Thread.java:619)

GOSTEI 0
Henrique Weissmann

Henrique Weissmann

08/06/2009

Cristian,

agora as coisas ficaram bem mais claras: observe a primeira mensagem no seu log de saída do servidor:

WARNING: /pages/clientes.jsp(13,2) '#{clienteManagerBean.cliente.nomeCliente}' Target Unreachable, 'cliente' returned null
org.apache.jasper.el.JspPropertyNotFoundException: /pages/clientes.jsp(13,2) '#{clienteManagerBean.cliente.nomeCliente}' Target Unreachable, 'cliente' returned null

Em algum ponto da sua aplicação, você precisa preencher o atributo cliente no seu backing bean clienteManagerBean.

Observe o código fonte dele:
public class ClienteManagerBean {

    private Cliente cliente;

    public Cliente getCliente() {
        return cliente;
    }

    public void setCliente(Cliente cliente) {
        this.cliente = cliente;
    }
   
    public String saveCliente(){
       
        try {
            FactoryDAO.getCLIENTE_DAO().save(cliente);
        } catch (Exception e) {
           
            e.printStackTrace();
        }
       
        return "sucesso";
       
    }
}

Em momento algum o atributo cliente está sendo preenchido. A solução para este problema irá variar de acordo com o modo como você estiver querendo gerenciar a navegação de sua aplicação.

Se o seu desejo for a criação de um novo cliente, poderia por exemplo criar um novo método no seu managed bean como o abaixo:

public String criarCliente() {
     setCliente(new Cliente());
     return "criarCliente";
}

Como se trata de um bean de sessão (vi isto no seu arquivo de configuração do faces), este método o redirecionaria para um formulário de cadastro, por exemplo, no qual você preencheria os valores relativos ao cliente e, em seguida, ao executar o método saveCliente(), executaria as ações na instância ja pré criada.

Outra alternativa poderia ser escrever o seu managed bean de tal forma que sempre o método getCliente() retornasse uma instancia de cliente. Para tal, bastaria reescreve-lo tal como no trecho abaixo:

public Cliente getCliente() {
    if (this.cliente == null) {
          this.cliente = new Cliente();
    }
    return this.cliente;
}

Agora, explicando uma possível razão para a ocorrência do erro 404. Ao compilar a página, o servlet do JSF irá buscar o atributo cliente do seu managed bean. Como irá encontrar um valor nulo, não irá saber como lidar com a situação quando for feito o submit do formulário. Como consequencia, não saberá também para onde redirecionar a página, resultando no erro 404.

Qualquer coisa estou a sua disposição.
GOSTEI 0
Cristian Mietlicki

Cristian Mietlicki

08/06/2009

Perfeito isso mesmo :)
GOSTEI 0
POSTAR