Boa noite pessoal, estou com um probleminha aqui. Ja tentei de tudo e não funcionou.
O que vou descrever é uma situação igual a que está ocorrendo (mesma estrutura), porém com classes diferentes, devido as classes do projeto real serem muito extensas. O que ocorre é o seguinte:
Tenho uma classe Pessoa com os atributos Nome e Email. Essa classe Pessoa(uma instância dela) é um atributo da minha classe PessoaBean. Na classe PessoaBean possuo um método, chamado listarPessoas(), que retorna uma lista de pessoas. Na minha pagina jsf tenho um h:datatable que tem como value “beanPessoa.listarPessoas”, sendo beanPessoa um Managed Bean mapeado para a classe PessoaBean e registrado no faces-config e listaPessoas um método da classe PessoaBean que retorna um lista de pessoas.
Quando tento exibir a página ocorre o seguinte erro:
javax.servlet.ServletException: /listarpessoas.jsp(16,12) ‘#{beanPessoa.listarPessoas}’ Property ‘listarPessoas’ not found on type beans.PessoaBean
javax.faces.webapp.FacesServlet.service(FacesServlet.java:256)
org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)
Como disse, listarPessoas é um método da classe PessoaBean e não uma propriedade.
OBS: No exemplo o próprio método listarPessoas cria uma lista de pessoas e retorna, porém no projeto real a lista de objetos vem do banco de dados. Sei que isso não interfere pois o erro que ocorre e o mesmo em ambos os casos.
Segue o código que estou utilizando.
Pessoa.java
package modelos;
public class Pessoa {
public Pessoa() { }
private String nome;
private String email;
//Get`s e Set`s
}
PessoaBean.java
package beans;
import java.util.List;
import modelos.Pessoa;
public class PessoaBean {
public PessoaBean() { }
private Pessoa pessoa;
//Get`s e Set`s
public List<Pessoa> listarPessoas() {
List<Pessoa> pessoas = null;
pessoa = new Pessoa();
pessoa.setNome("Fulano");
pessoa.setEmail("111@111.com");
pessoas.add(pessoa);
pessoa = new Pessoa();
pessoa.setNome("Beltrano");
pessoa.setEmail("111@111.com");
pessoas.add(pessoa);
pessoa = new Pessoa();
pessoa.setNome("Mukirana");
pessoa.setEmail("222@222.com");
pessoas.add(pessoa);
return pessoas;
}
}
faces-config.xml
<?xml version='1.0' encoding='UTF-8'?>
<faces-config version="1.2"
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">
<managed-bean>
<managed-bean-name>beanPessoa</managed-bean-name>
<managed-bean-class>beans.PessoaBean</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
</managed-bean>
</faces-config>
listarpessoas.jsp
<%@page contentType="text/html" 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>JSP Page</title>
</head>
<body>
<h:dataTable value="#{beanPessoa.listarPessoas}" var="pessoa">
<h:column><h:outputText value="#{pessoa.nome}"/></h:column>
<h:column><h:outputText value="#{pessoa.email}"/></h:column>
</h:dataTable>
</body>
</html>
</f:view>
Abraços… =)