JSF - Qdo passo parametros para o ManagedBean me gera erro

2 respostas
K

ola pessoal
eu tenho um datatable, onde tenho que passar um parametro pra ele da pagina, porem, nem tentei fazer a passagem de parametro e ele ja me retorna erro.

minha pagina .jsp

<h:dataTable   value="#{pessoaFisicaMB.listaPorParametroTeste}" var="pessoa" border="0"  rowClasses="TbltrTrue,TbltrFalse" width="750">
	
					<h:column>
						<f:facet name="header">
							<h:outputText value="Código" /> 
						</f:facet>
						<h:outputText value="#{pessoa.id}"/>
					</h:column>
					<h:column>
						<f:facet name="header">
							<h:outputText value="Nome" /> 
						</f:facet>
						<h:outputText value="#{pessoa.nome}"/>
					</h:column>
					<h:column>
						<f:facet name="header">
							<h:outputText value="CPF/CNPJ" /> 
						</f:facet>
						<h:outputText value="#{pessoa.cpf}"/>
					</h:column>	
					<h:column>
						<f:facet name="header">
							<h:outputText value="Status" /> 
						</f:facet>
						<h:outputText value="#{pessoa.status}"/>
					</h:column>																
				</h:dataTable>

meu ManagedBean

public List getListaPorParametroTeste() throws Exception{
        List list = new ArrayList();
        list.addAll(pessoaFisicaDB.getListaPorParametro("ab"));

		return list;
	}

metodo de busca no banco de dados

public List getListaPorParametro(String parametro) throws Exception{
		Connection conn  = null;
		ResultSet rs = null;
		String sql = BUSCA_POR_PARAMETRO;

        List list = new ArrayList();

        try {
			conn = GerenciadorConexao.getConexao();
			CallableStatement clblStmt = conn.prepareCall(sql);   
			
			clblStmt.setInt(1,1);
			clblStmt.setString(2,"");
			clblStmt.setString(3,"");			
			clblStmt.setInt(4,1);
			
			rs = clblStmt.executeQuery();
            while (rs.next()) {

                int id 				= rs.getInt(1);
                String nome 		= rs.getString(2);
                String documento 	= rs.getString(3);
                String status 		= rs.getString(4);    
                PessoaFisica pessoaFisica = new PessoaFisica();
                pessoaFisica.setNome(nome);
                pessoaFisica.setId(id);
                pessoaFisica.setCpf(documento);
                
            list.add(pessoaFisica);
            }
		} catch (Exception e) {
				throw new Exception("erro no update",e);
		}
		
		return list;
	}

classe DAO

package br.com.krusst.precadastro.dao;

import java.util.List;

import javax.faces.event.ActionEvent;

import br.com.krusst.precadastro.beans.PessoaFisica;
import br.com.krusst.precadastro.util.KrusstException;

public interface PessoaFisicaDAO{
	public int insert() throws KrusstException;
	public int update();
	public List getListaPorParametro(String parametro) throws Exception;
}

obs.: removi algumas classes para ficar mais simples

bem, qdo uso parametros, me gera erro

type Exception report

message 

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

exception 

javax.servlet.ServletException: Error getting property 'listaPorParametro' from bean of type br.com.krusst.precadastro.dao.PessoaFisicaDB
	javax.faces.webapp.FacesServlet.service(FacesServlet.java:225)
	org.ajax4jsf.framework.ajax.xmlfilter.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:96)
	org.ajax4jsf.framework.ajax.xmlfilter.BaseFilter.doFilter(BaseFilter.java:220)


root cause 

javax.faces.el.PropertyNotFoundException: Error getting property 'listaPorParametro' from bean of type br.com.krusst.precadastro.dao.PessoaFisicaDB
	com.sun.faces.el.PropertyResolverImpl.getValue(PropertyResolverImpl.java:127)
	com.sun.faces.el.impl.ArraySuffix.evaluate(ArraySuffix.java:187)
	com.sun.faces.el.impl.ComplexValue.evaluate(ComplexValue.java:171)
	com.sun.faces.el.impl.ExpressionEvaluatorImpl.evaluate(ExpressionEvaluatorImpl.java:263)
	com.sun.faces.el.ValueBindingImpl.getValue(ValueBindingImpl.java:160)
	com.sun.faces.el.ValueBindingImpl.getValue(ValueBindingImpl.java:143)
	javax.faces.component.UIData.getValue(UIData.java:547)
	javax.faces.component.UIData.getDataModel(UIData.java:876)
	javax.faces.component.UIData.setRowIndex(UIData.java:399)
	javax.faces.component.UIData.iterate(UIData.java:918)
	javax.faces.component.UIData.processDecodes(UIData.java:757)
	javax.faces.component.UIForm.processDecodes(UIForm.java:164)
	javax.faces.component.UIComponentBase.processDecodes(UIComponentBase.java:900)
	javax.faces.component.UIViewRoot.processDecodes(UIViewRoot.java:326)
	org.ajax4jsf.framework.ajax.AjaxViewRoot.access$001(AjaxViewRoot.java:53)
	org.ajax4jsf.framework.ajax.AjaxViewRoot$1.invokeRoot(AjaxViewRoot.java:254)
	org.ajax4jsf.framework.ajax.JsfOneOneInvoker.invokeOnRegionOrRoot(JsfOneOneInvoker.java:54)
	org.ajax4jsf.framework.ajax.AjaxContext.invokeOnRegionOrRoot(AjaxContext.java:176)
	org.ajax4jsf.framework.ajax.AjaxViewRoot.processDecodes(AjaxViewRoot.java:267)
	com.sun.faces.lifecycle.ApplyRequestValuesPhase.execute(ApplyRequestValuesPhase.java:99)
	com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:245)
	com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:110)
	javax.faces.webapp.FacesServlet.service(FacesServlet.java:213)
	org.ajax4jsf.framework.ajax.xmlfilter.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:96)
	org.ajax4jsf.framework.ajax.xmlfilter.BaseFilter.doFilter(BaseFilter.java:220)

se removo o parametro ele funciona “perfeitamente”

public List getListaPorParametro() throws Exception{...}
.
.
.
	public List getListaPorParametroTeste() throws Exception{
        List list = new ArrayList();
        list.addAll(pessoaFisicaDB.getListaPorParametro());

		return list;
	}

agora, nao entendo, ate pq, da forma como eu testei, o parametro nao faz nada no metodo
por que ocorre isso?
alguem pode me ajudar?
abs
T+

2 Respostas

N

Olá !

Error getting property ‘listaPorParametro’ from bean of type br.com.krusst.precadastro.dao.PessoaFisicaDB é porque o engine do JSF não consegue encontrar o método getListaPorParametro() dentro do seu MB, ou pq o método que foi encontrado apresenta problemas.

Ou seja, a exception que foi lançada não está ajudando em nada.

Eu tenho a impressão que vc declarou PessoaFisicaDB dentro do seu faces-config.xml ao invés de declarar PessoaFisicaMB.

Faça um teste unitário com o método getListaPorParametro da classe PessoaFisicaDB e corrija o problema com a sua camada de persistência, depois faça o teste utilizando a view(jsf).

Flow… = )

K

nogarotto:
Olá !

Error getting property ‘listaPorParametro’ from bean of type br.com.krusst.precadastro.dao.PessoaFisicaDB é porque o engine do JSF não consegue encontrar o método getListaPorParametro() dentro do seu MB, ou pq o método que foi encontrado apresenta problemas.

Ou seja, a exception que foi lançada não está ajudando em nada.

Eu tenho a impressão que vc declarou PessoaFisicaDB dentro do seu faces-config.xml ao invés de declarar PessoaFisicaMB.

Faça um teste unitário com o método getListaPorParametro da classe PessoaFisicaDB e corrija o problema com a sua camada de persistência, depois faça o teste utilizando a view(jsf).

Flow… = )

no faces-config esta correto, ja olhei,

a parte dele nao funcionar por nao achar o metodo eu acho dificil, pois, se eu removo o parametro, ele funcionar perfeitamente, oq esta me gerando erro mesmo é o parametro, parece que ele procura um metodo sem parametro, e como nao o encontra, gera erro.

mudei algumas coisas no metodo, e ele funciona

public List getListaPorParametroTeste() throws Exception{
        List list = new ArrayList();
        pessoaFisicaDB.getPessoaFisica().setNome("abc");
        list.addAll(pessoaFisicaDB.getListaPorParametro());

		return list;
	}
public List getListaPorParametro() throws Exception{
		Connection conn  = null;
		ResultSet rs = null;
		String sql = BUSCA_POR_PARAMETRO;

        List list = new ArrayList();

        try {
			conn = GerenciadorConexao.getConexao();
			CallableStatement clblStmt = conn.prepareCall(sql);   

			clblStmt.setInt(1,1);
			clblStmt.setString(2,this.pessoaFisica.getNome());
			clblStmt.setString(3,"8398");			
			clblStmt.setInt(4,1);
			
			rs = clblStmt.executeQuery();
            while (rs.next()) {

                int id 				= rs.getInt(1);
                String nome 		= rs.getString(2);
                String documento 	= rs.getString(3);


                PessoaFisica pessoaFisica = new PessoaFisica();
                pessoaFisica.setNome(nome);
                pessoaFisica.setId(id);
                pessoaFisica.setCpf(documento);
                
            list.add(pessoaFisica);
            }
		} catch (Exception e) {
				throw new Exception(e);
		}
		
		return list;
	}

desta forma ele funciona, porem, isso que eu fiz é correto?

porem, qdo eu passo parametro me gera o mesmo erro

public List getListaPorParametroTeste(ActionEvent event) throws Exception{
        List list = new ArrayList();
        pessoaFisicaDB.getPessoaFisica().setNome("abc");
        list.addAll(pessoaFisicaDB.getListaPorParametro());

		return list;
	}

o por que, que eu nao entendo, e como vc mesmo viu, o erro nao esta ajudando em nada
curiosidade
1-para usar essa passagem de parametro, eu sou obrigado a utilizar o ajax4jsf?
2-a versao 1.1 do JSF funciona normal isso?
3-eu nao estou usando o evento errado? ao invez de “ActionEvent” é outro?, pois ele mostra os dados assim que entra na pagina

obrigado
abs
T+

Criado 14 de abril de 2008
Ultima resposta 14 de abr. de 2008
Respostas 2
Participantes 2