Boa tarde a todos!
Estou aprendendo JSF com Primefaces e, mesmo copiando um exemplo do curso, o meu código não funciona. Não traz os dados.
Se alguém puder ajudar, será de grande valia!
Seguem os códigos:
Funcionarios.xhtml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:p="http://primefaces.org/ui"
xmlns:f="http://java.sun.com/jsf/core">
<h:head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</h:head>
<h:body>
<h:form id="frm">
<p:dataTable value="#{funcionarioBean.funcionarios}" var="funcionario">
<p:column headerText="Matrícula">
<h:outputText value="#{funcionario.matricula}"/>
</p:column>
<p:column headerText="Nome">
<h:outputText value="#{funcionario.nome}"/>
</p:column>
<p:column headerText="Data de Admissão">
<h:outputText value="#{funcionario.dataAdmissao}">
<f:convertDateTime pattern= "dd/MM/yyyy"/>
</h:outputText>
</p:column>
<p:column headerText="Salário">
<h:outputText value="#{funcionario.salario}">
<f:convertNumber type="currency" locale="pt_BR"/>
</h:outputText>
</p:column>
</p:dataTable>
</h:form>
</h:body>
</html>
Classe FuncionarioBean.java:
package br.eti.esj.principal;
import java.io.Serializable;
import java.math.BigDecimal;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
@ManagedBean
@ViewScoped
public class FuncionarioBean implements Serializable{
private static final long serialVersionUID = 1L;
private static final String[] nomes = { "João", "Maria", "José", "Sebastião", "Eduardo", "Mariana",
"Francisco", "Manoel", "Fernanda", "Gabriela", "Mário", "Marcos" };
private static final String[] sobrenomes = { "Souza", "Silva", "Andrade", "Machado", "Júnior",
"Albuquerque", "Alencar", "Assis", "Batista", "Camargo", "Coelho", "Costa", "Dias",
"Leal", "Lima", "Leite" };
private List<Funcionario> funcionarios;
public FuncionarioBean() throws ParseException {
System.out.println("Passei aqui 01");
funcionarios = new ArrayList<>();
System.out.println("Passei aqui 02");
for(int i=0; i < 50; i++) {
adicionarFuncionario();
}
}
private void adicionarFuncionario() {
String nomeCompleto = getNomeAleatorio() + " " + getSobrenomeAleatorio() + " " + getSobrenomeAleatorio();
System.out.println(nomeCompleto + "\n");
funcionarios.add(new Funcionario(getMatriculaAleatoria(), nomeCompleto, getDataAleatoria(),
getSalarioAleatorio()));
}
private BigDecimal getSalarioAleatorio() {
return (new BigDecimal(1000 + Math.random() * 29000));
}
private Long getMatriculaAleatoria() {
return (long) (Math.random() * 10000);
}
private Date getDataAleatoria() {
long dezAnosEmMilis = 24 * 60 * 60 * 1000;
long periodoSorteadoEmMilissegundos = ((long) (Math.random() * 10 * 365)) * dezAnosEmMilis;
return new Date(System.currentTimeMillis() - periodoSorteadoEmMilissegundos);
}
private String getSobrenomeAleatorio() {
int posicao = (int) Math.round(Math.random() * (sobrenomes.length - 1));
return sobrenomes[posicao];
}
private String getNomeAleatorio() {
int posicao = (int) Math.round(Math.random() * (nomes.length - 1));
return nomes[posicao];
}
public List<Funcionario> getFuncionarios() {
return funcionarios;
}
}
Classe Funcionario.java:
package br.eti.esj.principal;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
public class Funcionario implements Serializable{
private static final long serialVersionUID = 1L;
private Long matricula;
private String nome;
private Date dataAdmissao;
private BigDecimal salario;
public Funcionario(Long matricula, String nome, Date dataAdmissao, BigDecimal salario) {
this.matricula = matricula;
this.nome = nome;
this.dataAdmissao = dataAdmissao;
this.salario = salario;
}
public Long getMatricula() {
return matricula;
}
public void setMatricula(Long matricula) {
this.matricula = matricula;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public Date getDataAdmissao() {
return dataAdmissao;
}
public void setDataAdmissao(Date dataAdmissao) {
this.dataAdmissao = dataAdmissao;
}
public BigDecimal getSalario() {
return salario;
}
public void setSalario(BigDecimal salario) {
this.salario = salario;
}
}
POM.xml:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>br.eti.esj</groupId>
<artifactId>C_04_03_DataTable</artifactId>
<version>0.0.1</version>
<packaging>war</packaging>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.glassfish</groupId>
<artifactId>javax.faces</artifactId>
<version>2.1.22</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.primefaces</groupId>
<artifactId>primefaces</artifactId>
<version>6.0</version>
<scope>compile</scope>
</dependency>
</dependencies>
<build>
<finalName>C_04_03_DataTable</finalName>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
Uma observação: eu coloquei algumas mensagens “Passei aqui XY” no construtor do Bean, porém, nenhuma delas está sendo executada. Ou seja, o Bean não está sendo criado.
Outra coisa: já me disseram para colocar @ManagedBean(name="funcionarioBean")
mas isto também não adiantou, então voltei pro código normal (copiado do curso).
De antemão, muito obrigado!