[RESOLVIDO] - JSF 2.0 - ManageBean não captura dados

Olá pessoal, estou iniciando estudos no mundo do JSF, estou parado em uma parte do meu estudo, minha view não consegue localizar o meu backBean, usei o faces-config de duas formas e mesmo assim, hora não consigo passar para o meu bean e hora da esse erro, o dado da minha view, usei as anotações do jsf e mesmo assim não funcionou, esta dando um erro.

HTTP Status 500 -


type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: org.apache.jasper.el.JspPropertyNotFoundException: /buscar.jsp(13,3) ‘#{agenda.buscar}’ Target Unreachable, identifier ‘agenda’ resolved to null
javax.faces.webapp.FacesServlet.service(FacesServlet.java:521)

root cause

javax.faces.el.EvaluationException: org.apache.jasper.el.JspPropertyNotFoundException: /buscar.jsp(13,3) ‘#{agenda.buscar}’ Target Unreachable, identifier ‘agenda’ resolved to null
javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:95)
com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
javax.faces.component.UICommand.broadcast(UICommand.java:315)
javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:787)
javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1252)
com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
javax.faces.webapp.FacesServlet.service(FacesServlet.java:508)

root cause

org.apache.jasper.el.JspPropertyNotFoundException: /buscar.jsp(13,3) ‘#{agenda.buscar}’ Target Unreachable, identifier ‘agenda’ resolved to null
org.apache.jasper.el.JspMethodExpression.invoke(JspMethodExpression.java:74)
javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88)
com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
javax.faces.component.UICommand.broadcast(UICommand.java:315)
javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:787)
javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1252)
com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
javax.faces.webapp.FacesServlet.service(FacesServlet.java:508)

note The full stack trace of the root cause is available in the Apache Tomcat/6.0.30 logs.

segue os codes.

faces-config.xml

[code]

<?xml version="1.0" encoding="UTF-8"?> /buscar.jsp sucess /sucesso_busca.jsp failure /falha_busca.jsp
<navigation-rule>
	<from-view-id>/inserir.jsp</from-view-id>
	<navigation-case>
		<from-outcome>sucess</from-outcome>
		<to-view-id>/sucesso_insercao.jsp</to-view-id>
	</navigation-case>
	<navigation-case>
		<from-outcome>failure</from-outcome>
		<to-view-id>/falha_insercao.jsp</to-view-id>
	</navigation-case>
</navigation-rule>

[/code]

Como estou com a versão 2.0 não preciso declarar o

	<managed-bean>
		<managed-bean-name>agenda</managed-bean-name>
		<managed-bean-class>br.com.AgendaDB</managed-bean-class>
		<managed-bean-scope>session</managed-bean-scope>
	</managed-bean>

backBean

package br.com.jsf;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

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


@ManagedBean(name="agenda")
@SessionScoped


public class AgendaDB {
	private String nome = blank;
	private String endereco = blank;
	private String cidade = blank;
	private String telefone = blank;

	private String result_busca = blank;
	private String result_inserir = blank;

	public static final String BUSCA_INVALIDA = "failure";
	public static final String BUSCA_VALIDA = "success";
	public static final String SUCESSO_INSERCAO = "success";
	public static final String FALHA_INSERCAO = "failure";

	static Connection conn = null;
	static PreparedStatement stm = null;
	static ResultSet rs;
	static private String blank = "";

	public AgendaDB() {
		if (conn == null) {
			try {
				AcessoBD bd = new AcessoBD();
				conn = bd.obtemConexao();				
			} catch (Exception evento) {
				System.out.print(evento.getStackTrace());
			}
		}
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public String getCidade() {
		return cidade;
	}

	public void setCidade(String cidade) {
		this.cidade = cidade;
	}

	public String getEndereco() {
		return endereco;
	}

	public void setEndereco(String endereco) {
		this.endereco = endereco;
	}

	public String getTelefone() {
		return telefone;
	}
	

	public String inserir() {
		String result_inserir = FALHA_INSERCAO;
		String sqlInsert = "INSERT INTO pessoa(nome,endereco,cidade,telefone) values('"
				+ nome
				+ "','"
				+ endereco
				+ "','"
				+ cidade
				+ "','"
				+ telefone
				+ "')";
		try {
			stm = conn.prepareStatement(sqlInsert);
			stm.executeQuery();
			stm.close();
			result_inserir = SUCESSO_INSERCAO;
		} catch (SQLException eventoInsert) {
			System.err.println("Erro: " + eventoInsert);
			result_inserir = FALHA_INSERCAO;
		}
		return result_inserir;
	}

	public String buscar() throws SQLException {
		String result_busca = BUSCA_INVALIDA;
		String sqlSelect = "SELECT * FROM pessoa WHERE nome = '" + nome + "'";
		System.out.print(sqlSelect);
		try {
			stm = conn.prepareStatement(sqlSelect);
			rs = stm.executeQuery();
			if (rs.next()) {
				nome = rs.getString(1);
				endereco = rs.getString(2);
				cidade = rs.getString(3);
				telefone = rs.getString(4);
				result_busca = BUSCA_VALIDA;
			} else {
				result_busca = BUSCA_INVALIDA;
			}

			rs.close();
			stm.close();
		} catch (SQLException eventoSelect) {
			System.err.println("Erro: " + eventoSelect);
		}

		return result_busca;
	}

}

Minha view

[code]
<%@ taglib uri=“http://java.sun.com/jsf/core” prefix=“f” %>
<%@ taglib uri=“http://java.sun.com/jsf/html” prefix=“h” %>

Busca



voltar

[/code]

OBS.: As libs já estão nos seus devidos lugares, estou usando o tomcat 6,

coloque ajax=false no seu commandbutton

Mesmo sabendo que não adiantaria eu coloquei, obrigado pela ajuda, mas o erro ainda persiste, abraços.

Realmente nao ia adiantar, confundi com o primefaces. Tambem sou novato em jsf mas no caso do jsf 2 eu nao mapeio nada no faces-config apenas coloco como retorno do metodo uma string q automaticamente ele reconhece como uma view para redirecionar.

Por exemplo:

public String buscar(){		
	return "/view.jsp";
}

consegui resolver este erro colocando no faces-config.xml esta declaração

<?xml version="1.0"?>
<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">
</faces-config>

Mas mesmo assim não consigo passar para o meu Bean os dados da view

No meu bean já tenho a anotação

@ManagedBean(name="agenda")
@SessionScoped

e na view

<h:outputText value="Digite o nome:"/> <h:inputText id="nome" value="#{agenda.nome}" /> <h:commandButton value="OK" action="#{agenda.buscar}" /> </h:form>

dei um s.o.p no campo nome e ele esta null sem valor algum, como se o backBean não estivesse funcionando, tem os métodos get e set.

Nunca fiz o teste com isso, mas tira a throws SQLException e coloca dentro de um trycatch.
Nao sei se o componente aceita essa exception.

So uma ideia!!!

Fiz uma separação de tudo em pacotes, jdbc, dao, jsf, model, undeploy/deploy, resolvi desta forma, acredito que a lib de um dos jars estavam se sobrepondo + atualização do arquivo de contexto, abraços.

PS.: Só não sei como faz para encerrar este post.

vc edita a primeira mensagem que vc escreveu.
No titulo dela vc coloca [REVOLVIDO]