Veja um exemplo pronto!
Vc precisa primeiro criar uma lista no seu Bean e colocar os métodos get e set da sua lista.
Veja a classe Bean:
package br.com.cesan.gerecipas.cargo.presentation;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.ResourceBundle;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.faces.model.DataModel;
import org.apache.log4j.Logger;
import javax.faces.model.ListDataModel;
import br.com.cesan.gerecipas.cargo.bo.CargoBO;
import br.com.cesan.gerecipas.cargo.model.to.CargoTO;
public class CargoBean {
//informaçõe do logger
private static Logger logger = Logger.getLogger(CargoBean.class);
public CargoBean(){
context = FacesContext.getCurrentInstance();
bo = CargoBO.getInstance();
}
private int codigo;
private String descricao;
private String status;
List<CargoTO> listaCargos = new ArrayList<CargoTO>();
private DataModel model;
CargoBO bo;
FacesContext context = null;
FacesMessage mensagem = null;
ResourceBundle bundle = null;
//----------------------------------------
public int getCodigo() {
return codigo;
}
public void setCodigo(int codigo) {
this.codigo = codigo;
}
public String getDescricao() {
return descricao;
}
public void setDescricao(String descricao) {
this.descricao = descricao;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public List<CargoTO> getListaCargos() {
return listaCargos;
}
public void setListaCargos(List<CargoTO> listaCargos) {
this.listaCargos = listaCargos;
}
public DataModel getModel() {
return model;
}
public void setModel(DataModel model) {
this.model = model;
}
//ACTIONS WITHOUT NAVEGATION ============================
public void actionFindAll(ActionEvent event) {
//Mostra a mensagem de envio com sucesso
context = FacesContext.getCurrentInstance();
bundle = ResourceBundle.getBundle("br.com.cesan.gerecipas.resources.ApplicationResources", context.getViewRoot().getLocale());
try {
this.listaCargos = bo.findAll();
if (this.listaCargos.size() != 0) {
String msg = bundle.getString("geral.informacao.registrosencontrados");
MessageFormat format = new MessageFormat(msg);
Object[] parametros = {this.listaCargos.size()};
mensagem = new FacesMessage(format.format(parametros));
mensagem.setSeverity(FacesMessage.SEVERITY_INFO);
context.addMessage (null, mensagem);
} else {
String msg = bundle.getString("geral.informacao.registronaoencontrados");
mensagem = new FacesMessage(msg);
mensagem.setSeverity(FacesMessage.SEVERITY_ERROR);
context.addMessage (null, mensagem);
}
model = null;
model = new ListDataModel(this.listaCargos);
} catch (Exception e) {
if (logger.isDebugEnabled()) {
logger.error("Class CargoBean method: [actionFindAll] Erro: "+ e.getMessage());
}
FacesMessage mensagem = new FacesMessage( e.getMessage());
mensagem.setSeverity(FacesMessage.SEVERITY_ERROR);
context.addMessage (null, mensagem);
}
}
public void actionNovo(ActionEvent event){
//Limpa os campos da tela
codigo = 0;
descricao = null;
status = null;
}
public void actionSalvar(ActionEvent event) {
//Mostra a mensagem de envio com sucesso
context = FacesContext.getCurrentInstance();
bundle = ResourceBundle.getBundle("br.com.cesan.gerecipas.resources.ApplicationResources", context.getViewRoot().getLocale());
if(this.descricao == null || this.descricao.trim().equals("")){
String msg = bundle.getString("geral.message.erro.descricao");
mensagem = new FacesMessage(msg);
mensagem.setSeverity(FacesMessage.SEVERITY_ERROR);
context.addMessage (null, mensagem);
return;
}
CargoTO to = new CargoTO();
to.setDescricao(this.descricao);
to.setStatus(this.status);
try {
if(this.codigo == 0){
boolean valorSalvo = bo.salvar(to);
if(valorSalvo){
String msg = bundle.getString("geral.message.salvosucesso");
mensagem = new FacesMessage(msg);
mensagem.setSeverity(FacesMessage.SEVERITY_INFO);
context.addMessage (null, mensagem);
}else{
String msg = bundle.getString("geral.message.salvoerro");
mensagem = new FacesMessage(msg);
mensagem.setSeverity(FacesMessage.SEVERITY_ERROR);
context.addMessage (null, mensagem);
}
}else{
to.setCodigo(this.codigo);
boolean valorSalvo = bo.alterar(to);
if(valorSalvo){
String msg = bundle.getString("geral.message.alteradosucesso");
mensagem = new FacesMessage(msg);
mensagem.setSeverity(FacesMessage.SEVERITY_INFO);
context.addMessage (null, mensagem);
}
}
//Atualiza a lista de resultados
this.listaCargos = bo.findAll();
model = null;
model = new ListDataModel(this.listaCargos);
}catch (Exception e) {
if (logger.isDebugEnabled()) {
logger.error("Class CargoBean method: [actionSalvar] Erro: "+ e.getMessage());
}
FacesMessage mensagem = new FacesMessage( e.getMessage());
mensagem.setSeverity(FacesMessage.SEVERITY_ERROR);
context.addMessage (null, mensagem);
}
}
public void actionSelecionarAlterar(ActionEvent event){
CargoTO to = (CargoTO)model.getRowData();
this.setCodigo(to.getCodigo());
this.setDescricao(to.getDescricao());
this.setStatus(to.getStatus());
}
public void actionExcluir(ActionEvent event) {
//Mostra a mensagem de envio com sucesso
context = FacesContext.getCurrentInstance();
bundle = ResourceBundle.getBundle("br.com.cesan.gerecipas.resources.ApplicationResources", context.getViewRoot().getLocale());
CargoTO to = (CargoTO)model.getRowData();
this.setCodigo(to.getCodigo());
this.setDescricao(to.getDescricao());
this.setStatus(to.getStatus());
try {
boolean valorExcluir = bo.excluir(to.getCodigo());
if(valorExcluir){
String msg = bundle.getString("geral.message.excluidasucesso");
mensagem = new FacesMessage(msg);
mensagem.setSeverity(FacesMessage.SEVERITY_INFO);
context.addMessage (null, mensagem);
}else{
String msg = bundle.getString("geral.message.salvoerro");
mensagem = new FacesMessage(msg);
mensagem.setSeverity(FacesMessage.SEVERITY_ERROR);
context.addMessage (null, mensagem);
}
//Atualiza a lista de resultados
this.listaCargos = bo.findAll();
model = null;
model = new ListDataModel(this.listaCargos);
//Limpa os campos da tela
codigo = 0;
descricao = null;
status = null;
}catch (Exception e) {
if (logger.isDebugEnabled()) {
logger.error("Class CargoBean method: [actionSalvar] Erro: "+ e.getMessage());
}
FacesMessage mensagem = new FacesMessage( e.getMessage());
mensagem.setSeverity(FacesMessage.SEVERITY_ERROR);
context.addMessage (null, mensagem);
}
}
private void limparCampos(){
codigo = 0;
descricao = null;
status = null;
}
//ACTIONS WITH NAVEGATION ===============================
public String actionOutComeCargo(){
return null;
}
public String actionIrGestorCargo(){
//Limpa os campos da tela
this.limparCampos();
return "principalGestor_gestorCargo";
}
}
Veja a página
<?xml version="1.0" encoding="ISO-8859-1"?>
<!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:f="http://java.sun.com/jsf/core"
xmlns:c="http://java.sun.com/jstl/core"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:rich="http://richfaces.org/rich"
xmlns:a4j="http://richfaces.org/a4j">
<ui:composition template="/templates/templateGestor.xhtml">
<ui:define name="conteudo">
<table align="center" border="0" cellpadding="0" cellspacing="0" width="75%">
<tr>
<td height="0">
<img />
<!-- Título da tela -->
<strong><h:outputLabel value="#{i18n['geral.titulo.cipa']}"/></strong>
</td>
</tr>
</table>
<table align="center" border="0" cellpadding="0" cellspacing="0" width="76%">
<tr>
<td width="14"><img /></td>
<td width="688" height="4" background="${ctx}/imagens/topo_janela_meio.gif"></td>
<td width="14"><img /></td>
</tr>
<tr>
<td height="40" background="${ctx}/imagens/meio_janela_esq.gif"></td>
<td align="right">
<a4j:outputPanel id="botoes" ajaxRendered="true">
<!-- botao novo -->
<a4j:commandLink id="btnNovo"
action="#{controleCipa.actionOutComeCipa}"
actionListener="#{controleCipa.actionNovo}"
oncomplete="limparCamposCipa();"
reRender="msg,upload,estabelecimento,nomeTecnico,botoes,btnSalvar,btnAlterar,btnExcluir"
>
<h:graphicImage value="/imagens/icone/ico_novo.gif" alt="Novo" styleClass="noBorder"/>
</a4j:commandLink>
<!-- botao salvar -->
<a4j:commandLink id="btnSalvar"
action="#{controleCipa.actionOutComeCipa}"
actionListener="#{controleCipa.actionSalvar}"
reRender="msg,panelLista,dataresultados,upload,codigo,periodogestao,estabelecimento,agrupamentoCargo,descricao,email,status,codigoTecnico,matriculaTecnico,nomeTecnico"
rendered="#{controleCipa.mostrarBotoes}"
>
<h:graphicImage value="/imagens/icone/ico_salvar.gif" alt="Salvar" styleClass="noBorder"/>
</a4j:commandLink>
</a4j:outputPanel>
</td>
<td background="${ctx}/imagens/meio_janela_dir.gif"></td>
</tr>
<tr>
<td height="40" background="${ctx}/imagens/meio_janela_esq.gif"></td>
<td>
<table width="70%" border="0" cellspacing="1" cellpadding="1" align="center">
<tr>
<td><h:outputLabel value="#{i18n['geral.periodogestao']}:"/></td>
<td>
<h:inputHidden id="codigo" value="#{controleCipa.codigoCipa}" />
<h:selectOneMenu id="periodogestao" value="#{controleCipa.codigoPeriodoGestao}" style="width:314px;"
valueChangeListener="#{controleCipa.actionMontarSelectEstabelecimento}" immediate="true" >
<f:selectItem itemLabel="Selecione..." itemValue="-1" />
<f:selectItems value="#{controleCipa.listaPeriodoGestao}" />
<a4j:support event="onchange" reRender="msg,estabelecimento,panelLista,dataresultados,botoes,btnSalvar,btnAlterar,btnExcluir" />
</h:selectOneMenu>
</td>
</tr>
<tr>
<td><h:outputLabel value="#{i18n['geral.estabelecimento']}:"/></td>
<td>
<h:selectOneMenu id="estabelecimento" value="#{controleCipa.codigoEstabelecimento}" style="width:314px;" >
<f:selectItems value="#{controleCipa.listaEstabelecimento}" />
</h:selectOneMenu>
</td>
</tr>
<tr>
<td><h:outputLabel value="#{i18n['geral.agrupamentocargos']}:"/></td>
<td>
<h:selectOneMenu id="agrupamentoCargo" value="#{controleCipa.codigoAgrupamentoCargo}" style="width:314px;" >
<f:selectItems value="#{controleCipa.listaAgrupamentoCargo}" />
</h:selectOneMenu>
</td>
</tr>
<tr>
<td><h:outputLabel value="#{i18n['geral.descricao']}:"/></td>
<td>
<h:inputText id="descricao" value="#{controleCipa.descricao}" maxlength="50" size="50" />
</td>
</tr>
<tr>
<td><h:outputLabel value="#{i18n['geral.email']}:"/></td>
<td>
<h:inputText id="email" value="#{controleCipa.email}" maxlength="50" size="50" />
</td>
</tr>
<tr>
<td><h:outputLabel value="#{i18n['geral.status']}:"/></td>
<td>
<h:selectOneMenu id="status" value="#{controleCipa.status}" style="width:104px;">
<f:selectItem itemLabel="Ativo" itemValue="A" />
<f:selectItem itemLabel="Inativo" itemValue="I"/>
</h:selectOneMenu>
</td>
</tr>
<tr>
<td><h:outputLabel value="#{i18n['geral.tecnico']}:"/></td>
<td>
<table width="100%" border="0" cellspacing="1" cellpadding="0">
<tr>
<td width="5%">
<h:inputHidden id="codigoTecnico" value="#{controleCipa.codigoTecnico}" />
<h:inputText id="matriculaTecnico" value="#{controleCipa.matriculaTecnico}" maxlength="10" size="10" onkeypress="validaNumero(event, this)"/>
</td>
<td width="5%">
<a4j:commandButton id="btLocalizarTitular" value="..."
actionListener="#{controleCipa.actionFindTecnicoTrabalho}"
reRender="msg,codigoTecnico,matriculaTecnico,nomeTecnico" />
</td>
<td width="90%">
<b>
<h:outputText id="nomeTecnico" value="#{controleCipa.nomeTecnico}" />
</b>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td valign="top">
<h:outputLabel value="#{i18n['geral.resolucao']}:"/>
</td>
<td>
<rich:fileUpload
fileUploadListener="#{controleCipa.listener}"
maxFilesQuantity="#{controleCipa.uploadsAvailable}"
id="upload"
immediateUpload="true"
acceptedTypes="doc,docx,xls,xlsx,pdf"
listHeight="55px"
listWidth="320px"
addControlLabel="Selecionar"
clearAllControlLabel="Limpar Todos"
uploadControlLabel="Enviar"
progressLabel="Enviando"
doneLabel="Enviado"
stopControlLabel="Parar"
clearControlLabel="Limpar"
>
<a4j:support event="onclear" reRender="upload" actionListener="#{controleCipa.clearUploadData}"/>
<f:facet name="label">
<h:outputText value="{_KB}KB para {KB}KB uploaded --- {mm}:{ss}" />
</f:facet>
</rich:fileUpload>
</td>
</tr>
<tr>
<td align="center" height="20px" colspan="2">
</td>
</tr>
</table>
</td>
<td background="${ctx}/imagens/meio_janela_dir.gif"></td>
</tr>
<tr>
<td background="${ctx}/imagens/meio_janela_esq.gif"> </td>
<td>
<br></br>
<a4j:outputPanel id="msg" ajaxRendered="true">
<table class="tabelaMensagem" cellpadding="0" cellspacing="0" width="100%" height="1px">
<tr>
<td class="tabelaMensagem_Column_left_2">
<!-- mensagens de erro -->
<rich:messages globalOnly="true"
infoClass="mensagem_Info"
errorClass="mensagem_Erro"/>
</td>
</tr>
</table>
</a4j:outputPanel>
</td>
<td background="${ctx}/imagens/meio_janela_dir.gif"> </td>
</tr>
<tr>
<td><img /></td>
<td height="5" background="${ctx}/imagens/down_janela_meio.gif"></td>
<td><img /></td>
</tr>
</table>
</ui:define>
<ui:define name="tabela">
<a4j:outputPanel id="panelLista" ajaxRendered="true">
<rich:dataTable id="dataresultados" value="#{controleCipa.model}" var="cipas"
border="0" cellpadding="1" cellspacing="1" align="center" width="76%"
rowClasses="tabelaCinza_Row1,tabelaCinza_Row2"
columnClasses="tabelaCinza_Column_left, tabelaCinza_Column_center, tabelaCinza_Column_center"
rendered="#{not empty controleCipa.listaCipas}"
>
<f:facet name="header">
<rich:columnGroup>
<rich:column width="30%">
<h:outputText value="Descrição" />
</rich:column>
<rich:column width="30%">
<h:outputText value="Email" />
</rich:column>
<rich:column width="20%">
<h:outputText value="Resolução" />
</rich:column>
<rich:column width="10%">
<h:outputText value="Status" />
</rich:column>
<rich:column width="10%">
<h:outputText value=" "/>
</rich:column>
</rich:columnGroup>
</f:facet>
<rich:column>
<h:outputText value="#{cipas.descricao}"/>
</rich:column>
<rich:column>
<h:outputText value="#{cipas.email}"/>
</rich:column>
<rich:column>
<a4j:commandLink value="#{cipas.resolucao}"
onclick="abrirArquivoDocumento('#{cipas.resolucao}',1)" />
</rich:column>
<rich:column style="text-align:center;">
<h:outputText value="#{cipas.status eq 'A'? 'Ativo':'Inativo'}"/>
</rich:column>
<rich:column style="text-align:center;">
<a4j:commandLink id="btnAlterar"
action="#{controleCipa.actionOutComeCipa}"
actionListener="#{controleCipa.actionSelecionarAlterar}"
reRender="msg,codigo,periodogestao,estabelecimento,agrupamentoCargo,descricao,email,status,codigoTecnico,matriculaTecnico,nomeTecnico"
rendered="#{controleCipa.mostrarBotoes}"
>
<h:graphicImage value="/imagens/icone/ico_alterar.gif" alt="Alterar" styleClass="noBorder"/>
</a4j:commandLink>
<h:outputText value=" "/>
<a4j:commandLink id="btnExcluir"
action="#{controleCipa.actionOutComeCipa}"
actionListener="#{controleCipa.actionExcluir}"
onclick="if(!excluir()){return;}"
oncomplete="limparCamposCipa();"
reRender="msg,dataresultados,panelLista,upload,estabelecimento,nomeTecnico"
rendered="#{controleCipa.mostrarBotoes}"
>
<h:graphicImage value="/imagens/icone/ico_excluir.gif" alt="Excluir" styleClass="noBorder"/>
</a4j:commandLink>
</rich:column>
</rich:dataTable>
<rich:datascroller for="dataresultados"
maxPages="10"
id="scrol_1"
reRender="dataresultados"
rendered="#{not empty controleCargo.listaCargos}"
/>
</a4j:outputPanel>
</ui:define>
</ui:composition>
</html>