Estou trabalhando em um projeto usando Jsf e Facelets, estou tendo o seguinte problema:
Estou implementado uma tela de cadastro exatamente igual ao exemplo do Richfaces
http://livedemo.exadel.com/richfaces-demo/richfaces/dataTable.jsf?tab=editDataTable&cid=3044510
Verifiquei no código fonte do exemplo e percebi que o backingBean utilizado está com o scopo de Session no faces-config.xml. Aqui na minha aplicação está funcionando perfeita quando eu não utilizo templates ui:composition, mas quando utilizo através de templates eu consigo apenas carregar a linha da tabela no modalPanel e quando altero os valores e clico em OK eles não são atualizados, eles chegam no backingBean sem as minhas alterações, ou seja, chegam exatamente como estavam antes.
Vou postar os códigos:
Tela Principal (esta usa os templates)
cadastroMedico.jspx
<?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:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:rich="http://richfaces.org/rich"
xmlns:a4j="http://richfaces.org/a4j">
<ui:composition template="/WEB-INF/template/templateContainer.jspx">
<a4j:keepAlive beanName="cadastroMedico" ajaxOnly="true"></a4j:keepAlive>
<ui:define name="css">
<link href="/gestormed/style/css/manutencao/cadastroMedico.css" rel="stylesheet" style="text/css" />
</ui:define>
<ui:param name="headerPainelCadastroPrincipal" value="Cadastro de Médicos"></ui:param>
<ui:param name="bindBarraMenu" value="#{cadastroMedico.barraMenu}"></ui:param>
<ui:param name="bindMenuIncluir" value="#{cadastroMedico.incluir}"></ui:param>
<ui:param name="bindPainelFiltroPesquisa" value="#{cadastroMedico.painelFiltroPesquisa}"></ui:param>
<ui:param name="bindPainelCadastroForm"
value="#{cadastroMedico.painelCadastroForm}"></ui:param>
<ui:param name="bindBotaoSalvar" value="#{cadastroMedico.botaoSalvar}"></ui:param>
<ui:param name="bindBotaoAlterar"
value="#{cadastroMedico.botaoAlterar}"></ui:param>
<ui:param name="bindBotaoCancelar"
value="#{cadastroMedico.botaoCancelar}"></ui:param>
<ui:param name="bindPainelMensagem"
value="#{cadastroMedico.painelMensagem}"></ui:param>
<ui:param name="bindImagemMensagem"
value="#{cadastroMedico.imagemMensagem}"></ui:param>
<ui:param name="bindTextoMensagem"
value="#{cadastroMedico.textoMensagem}"></ui:param>
<ui:param name="bindTableList" value="#{cadastroMedico.tableList}"></ui:param>
<ui:param name="headerTableList" value="Lista de Consultórios"></ui:param>
<ui:param name="bindDataScroller"
value="#{cadastroMedico.dataScroller}"></ui:param>
<ui:param name="bindPainelMensagemCadastro" value="#{cadastroMedico.painelMensagemCadastro}"></ui:param>
<ui:param name="bindImagemMensagemCadastro" value="#{cadastroMedico.imagemMensagemCadastro}"></ui:param>
<ui:param name="bindTextoMensagemCadastro" value="#{cadastroMedico.textoMensagemCadastro}"></ui:param>
<ui:define name="filtros">
<h:panelGrid columns="2">
<h:outputText value="Nome:" />
<h:inputText />
</h:panelGrid>
</ui:define>
<ui:define name="btnFiltro">
<h:commandButton action="#{cadastroMedico.pesquisar}" value="Pesquisar" />
<a4j:commandButton value="Limpar" actionListener="#{cadastroMedico.limparFiltro}" reRender="campoFiltro"/>
<h:commandButton value="Fechar" action="Inicio" immediate="true" />
</ui:define>
<ui:define name="colunasTableList">
<rich:column>
<f:facet name="header">
<h:outputText value="Campo da Tabela" />
</f:facet>
<h:outputText styleClass="fontTable" value="#{item}"></h:outputText>
</rich:column>
<rich:column binding="#{cadastroMedico.colunaAction}" width="50">
<f:facet name="header">
<h:outputText value="Ações" />
</f:facet>
<h:panelGrid columns="2">
<h:outputLink id="editLink" binding="#{cadastroMedico.editLink}" value="../../telas/manutencao/teste.jsf">
<h:graphicImage url="/style/img/editar_visualizar.png" style="border:0px;" />
</h:outputLink>
<h:outputLink id="deleteLink" binding="#{cadastroMedico.deleteLink}" value="../../telas/manutencao/teste.jsf" onclick="if(!confirm('Confirma exclusão do registro?')) return false">
<h:graphicImage url="/style/img/delete.png" style="border:0px;"/>
</h:outputLink>
</h:panelGrid>
<rich:toolTip for="editLink" value="Editar / Visualizar registro." showDelay="500"></rich:toolTip>
<rich:toolTip for="deleteLink" value="Exclui o registro selecionado." showDelay="500"></rich:toolTip>
</rich:column>
</ui:define>
<ui:define name="formCadastro">
<ui:include src="/WEB-INF/template/templatePessoa.jspx" />
<h:outputText value="Dados Profissionais" style="font-size: 18px;" />
<rich:separator height="2px" style="margin-bottom: 5px;"/>
<rich:panel>
<h:panelGrid columns="3">
<h:outputText value="Cnes:" />
<h:inputText id="campoCnes" value="#{cadastroMedico.obj.cnes}" required="true">
<rich:ajaxValidator event="onblur" />
</h:inputText>
<rich:message for="campoCnes" errorClass="errorValidation">
<f:facet name="errorMarker">
<h:graphicImage url="/style/img/no.png" style="margin-right: 10px;" />
</f:facet>
</rich:message>
</h:panelGrid>
</rich:panel>
<ui:include src="/WEB-INF/template/templateConvenio.jspx" />
<ui:include src="/WEB-INF/template/templateEndereco.jspx" />
</ui:define>
</ui:composition>
</html>
= Templates Utilizados:
templateContainer.jspx
<?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:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:rich="http://richfaces.org/rich"
xmlns:c="http://java.sun.com/jsp/jstl/core">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<link href="/gestormed/style/css/basico.css" rel="stylesheet" style="text/css" />
<link href="/gestormed/style/css/menu.css" rel="stylesheet" style="text/css" />
<ui:insert name="css"></ui:insert>
<title>
<ui:insert name="title"><h:outputText value="#{msgs.titulo}" /></ui:insert>
</title>
</head>
<body>
<h:form id="formContainer">
<div id="container">
<div id="cabecalho"></div>
<div id="menu">
<ui:include src="/WEB-INF/template/templateMenu.jspx"></ui:include>
</div>
<div id="tela">
<ui:include src="/WEB-INF/template/templateTela.jspx">
<ui:param name="headerPainelCadastroPrincipal" value="#{headerPainelCadastroPrincipal}"></ui:param>
<ui:param name="bindBarraMenu" value="#{bindBarraMenu}"></ui:param>
<ui:param name="bindMenuIncluir" value="#{bindMenuIncluir}"></ui:param>
<ui:param name="bindPainelFiltroPesquisa" value="#{bindPainelFiltroPesquisa}"></ui:param>
<ui:param name="bindPainelMensagem" value="#{bindPainelMensagem}" />
<ui:param name="bindImagemMensagem" value="#{bindImagemMensagem}" />
<ui:param name="bindTextoMensagem" value="#{bindTextoMensagem}" />
<ui:param name="bindTableList" value="#{bindTableList}"></ui:param>
<ui:param name="headerTableList" value="#{headerTableList}"></ui:param>
<ui:param name="bindDataScroller" value="#{bindDataScroller}"></ui:param>
<ui:param name="bindPainelCadastroForm" value="#{bindPainelCadastroForm}"></ui:param>
<ui:param name="bindBotaoSalvar" value="#{bindBotaoSalvar}"></ui:param>
<ui:param name="bindBotaoAlterar" value="#{bindBotaoAlterar}"></ui:param>
<ui:param name="bindBotaoCancelar" value="#{bindBotaoCancelar}"></ui:param>
<ui:param name="bindPainelMensagemCadastro" value="#{bindPainelMensagemCadastro}"></ui:param>
<ui:param name="bindImagemMensagemCadastro" value="#{bindImagemMensagemCadastro}"></ui:param>
<ui:param name="bindTextoMensagemCadastro" value="#{bindTextoMensagemCadastro}"></ui:param>
</ui:include>
</div>
<div id="footer"></div>
</div>
</h:form>
</body>
</html>
templateTela.jspx
<?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:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:rich="http://richfaces.org/rich"
xmlns:a4j="http://richfaces.org/a4j"
xmlns:c="http://java.sun.com/jsp/jstl/core">
<rich:panel id="painelCadastroPrincipal" header="#{headerPainelCadastroPrincipal}" headerClass="painelTelas">
<rich:toolBar id="barraMenu" binding="#{bindBarraMenu}" itemSeparator="line" >
<rich:menuItem binding="#{bindMenuIncluir}" value="Incluir" icon="/style/img/incluir.png"
style="color: white;" selectStyle="color: #333333">
<rich:toolTip showDelay="500" value="Incluir novo registro." />
</rich:menuItem>
</rich:toolBar>
<rich:panel id="painelFiltroPesquisa" binding="#{bindPainelFiltroPesquisa}">
<h:outputText value="Filtro de Pesquisa" style="font-size: 18px;" />
<rich:separator height="2px" style="margin-bottom: 20px;"/>
<div id="filtro">
<ui:insert name="filtros">Filtros de Pesquisa</ui:insert>
</div>
<rich:separator height="1px" style="margin-top: 10px; margin-bottom: 2px;" />
<ui:insert name="btnFiltro">Botões para o Filtro</ui:insert>
</rich:panel>
<rich:panel id="PainelMensagem" binding="#{bindPainelMensagem}" style="margin-top: 10px;" styleClass="mensagemCadastro">
<h:graphicImage binding="#{bindImagemMensagem}" style="float: left; margin-right: 10px;"/>
<h:outputText binding="#{bindTextoMensagem}" style="font-size: 12px; color: #9A3C03;"/>
</rich:panel>
<rich:dataTable id="TableList" binding="#{bindTableList}" rows="15" style="margin-top: 10px; margin-left: auto; margin-right: auto;"
footerClass="footerTable" width="885px" var="item"
onRowMouseOver="this.style.backgroundColor='#F1F1F1'" onRowMouseOut="this.style.backgroundColor='#{a4jSkin.tableBackgroundColor}'">
<f:facet name="header">
<h:outputText value="#{headerTableList}" style="font-size: 14px;" />
</f:facet>
<ui:insert name="colunasTableList"></ui:insert>
<f:facet name="footer">
<rich:datascroller id="paging" binding="#{bindDataScroller}"
for="TableList" maxPages="15" renderIfSinglePage="false" />
</f:facet>
</rich:dataTable>
<rich:panel id="painelCadastroForm" binding="#{bindPainelCadastroForm}" headerClass="telasCadastro">
<rich:panel binding="#{bindPainelMensagemCadastro}" styleClass="mensagemCadastro">
<h:graphicImage binding="#{bindImagemMensagemCadastro}" style="float: left; margin-right: 10px;"/>
<h:outputText binding="#{bindTextoMensagemCadastro}" style="font-size: 12px; color: #9A3C03;"/>
</rich:panel>
<ui:insert name="formCadastro">Formulário de Cadastro</ui:insert>
<rich:separator height="1px" style="margin-top: 20px; margin-bottom: 2px;" />
<h:commandButton id="botaoSalvar" binding="#{bindBotaoSalvar}" value="Salvar" />
<h:commandButton id="botaoAlterar" binding="#{bindBotaoAlterar}" value="Alterar" />
<h:commandButton id="botaoVoltar" binding="#{bindBotaoCancelar}" value="Voltar / Cancelar" immediate="true"/>
<h:commandButton id="botaoCancelar" action="Inicio" value="Cancelar Tudo" immediate="true" />
</rich:panel>
</rich:panel>
</html>
templateConvenio.jspx
<?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:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:rich="http://richfaces.org/rich"
xmlns:a4j="http://richfaces.org/a4j"
xmlns:c="http://java.sun.com/jsp/jstl/core">
<h:outputText value="Convênios" style="font-size: 18px;" />
<rich:separator height="2px" style="margin-bottom: 5px;"/>
<rich:panel>
<h:form>
<a4j:region>
<h:inputHidden value="#{cadastroConvenio.convenio.idConvenio}" />
<rich:dataTable value="#{cadastroConvenio.convenios}" var="convenio"
rows="5" rowKeyVar="row" ajaxKeys="#{cadastroConvenio.keys}" id="tableConvenio">
<f:facet name="header">
<h:outputText value="Convênios Adicionados" />
</f:facet>
<rich:column>
<f:facet name="header">
<h:outputText value="Matrícula" />
</f:facet>
<h:outputText value="#{convenio.matricula}" id="matriculaConvenio"/>
</rich:column>
<rich:column>
<f:facet name="header">
<h:outputText value="Número Cartão" />
</f:facet>
<h:outputText value="#{convenio.numCartao}" id="numCartaoConvenio"/>
</rich:column>
<rich:column>
<f:facet name="header">
<h:outputText value="Data Validade" />
</f:facet>
<h:outputText value="#{convenio.dataValidade}" id="dataValidadeConvenio"/>
</rich:column>
<rich:column>
<f:facet name="header">
<h:outputText value="Descrição" />
</f:facet>
<h:outputText value="#{convenio.descricao}" id="descricaoConvenio"/>
</rich:column>
<rich:column>
<f:facet name="header">
<h:outputText value="Ações" />
</f:facet>
<a4j:commandLink ajaxSingle="true" id="editConvenio"
oncomplete="#{rich:component('editPanel')}.show()">
<h:graphicImage value="/style/img/editar_visualizar.png" style="border:0"/>
<f:setPropertyActionListener value="#{convenio}"
target="#{cadastroConvenio.currentItem}" />
<f:setPropertyActionListener value="#{row}"
target="#{cadastroConvenio.currentRow}" />
</a4j:commandLink>
<rich:toolTip for="editConvenio" value="Editar"/>
<a4j:commandLink ajaxSingle="true" id="deleteConvenio"
oncomplete="#{rich:component('deletePanel')}.show()">
<h:graphicImage styleClass="hidelink" value="/style/img/delete.png" style="border:0"/>
<f:setPropertyActionListener value="#{row}"
target="#{cadastroConvenio.currentRow}" />
</a4j:commandLink>
<rich:toolTip for="deleteConvenio" value="Excluir"/>
</rich:column>
<f:facet name="footer">
<rich:datascroller renderIfSinglePage="false" maxPages="5"/>
</f:facet>
</rich:dataTable>
</a4j:region>
</h:form>
<rich:modalPanel id="editPanel" autosized="true" width="450">
<f:facet name="header">
<h:outputText value="Editar Convênio Selecionado" />
</f:facet>
<f:facet name="controls">
<h:panelGroup>
<h:graphicImage value="/style/img/close.png"
id="hidelink" styleClass="hidelink"/>
<rich:componentControl for="editPanel" attachTo="hidelink"
operation="hide" event="onclick" />
</h:panelGroup>
</f:facet>
<h:form>
<h:panelGrid columns="1">
<a4j:outputPanel ajaxRendered="true">
<h:panelGrid columns="3">
<h:outputText value="Matrícula"/>
<h:inputText value="#{cadastroConvenio.currentItem.matricula}" id="campoMatriculaConvenio"/>
<rich:message for="campoMatriculaConvenio" errorClass="errorValidation">
<f:facet name="errorMarker">
<h:graphicImage url="/style/img/no.png" style="margin-right: 10px;" />
</f:facet>
</rich:message>
<h:outputText value="Número Cartão" />
<h:inputText value="#{cadastroConvenio.currentItem.numCartao}" id="campoNumCartaoConvenio"/>
<rich:message for="campoNumCartaoConvenio" errorClass="errorValidation">
<f:facet name="errorMarker">
<h:graphicImage url="/style/img/no.png" style="margin-right: 10px;" />
</f:facet>
</rich:message>
<h:outputText value="Data Validade" />
<rich:calendar id="campoDataValidadeConvenio" value="#{cadastroConvenio.currentItem.dataValidade}"
datePattern="dd/MM/yyyy" firstWeekDay="0" enableManualInput="false" showWeeksBar="false"
weekDayLabels="Sab, Dom, Seg, Ter, Qua, Qui, Sex" showFooter="false"/>
<rich:message for="campoDataValidadeConvenio" errorClass="errorValidation">
<f:facet name="errorMarker">
<h:graphicImage url="/style/img/no.png" style="margin-right: 10px;" />
</f:facet>
</rich:message>
<h:outputText value="Descrição:" />
<h:inputText value="#{cadastroConvenio.currentItem.descricao}" id="campoDescricaoConvenio"/>
<rich:message for="campoDescricaoConvenio" errorClass="errorValidation">
<f:facet name="errorMarker">
<h:graphicImage url="/style/img/no.png" style="margin-right: 10px;" />
</f:facet>
</rich:message>
</h:panelGrid>
</a4j:outputPanel>
<a4j:commandButton value="Confirmar" action="#{cadastroConvenio.store}" ajaxSingle="true"
reRender="matriculaConvenio, numCartaoConvenio, dataValidadeConvenio, descricaoConvenio"
oncomplete="if (#{facesContext.maximumSeverity == null}) #{rich:component('editPanel')}.hide();"/>
</h:panelGrid>
</h:form>
</rich:modalPanel>
<rich:modalPanel id="deletePanel" autosized="true" width="200">
<f:facet name="header">
<h:outputText value="Excluir este convênio da lista ?"
style="padding-right:15px;" />
</f:facet>
<f:facet name="controls">
<h:panelGroup>
<h:graphicImage value="/style/img/close.png"
styleClass="hidelink" id="hidelink2" />
<rich:componentControl for="deletePanel" attachTo="hidelink2"
operation="hide" event="onclick" />
</h:panelGroup>
</f:facet>
<h:form>
<table width="100%">
<tbody>
<tr>
<td align="center" width="50%">
<a4j:commandButton value="Excluir" ajaxSingle="true" action="#{cadastroConvenio.delete}"
oncomplete="#{rich:component('deletePanel')}.hide();" reRender="tableConvenio" />
</td>
<td align="center" width="50%">
<a4j:commandButton value="Cancelar"
onclick="#{rich:component('deletePanel')}.hide();return false;" />
</td>
</tr>
</tbody>
</table>
</h:form>
</rich:modalPanel>
<a4j:status onstart="#{rich:component('wait')}.show()" onstop="#{rich:component('wait')}.hide()"/>
<rich:modalPanel id="wait" autosized="true" width="200" height="120" moveable="false" resizeable="false">
<f:facet name="header">
<h:outputText value="Processando"/>
</f:facet>
<h:outputText value="Aguarde..."/>
</rich:modalPanel>
<rich:messages></rich:messages>
</rich:panel>
</html>
BackingBeans
- CadastroMedico.java
package br.com.gestormed.backingbeans.manutencao;
import java.util.ArrayList;
import java.util.List;
import javax.faces.component.html.HtmlCommandButton;
import javax.faces.component.html.HtmlGraphicImage;
import javax.faces.component.html.HtmlOutputLink;
import javax.faces.component.html.HtmlOutputText;
import javax.faces.context.FacesContext;
import javax.faces.el.MethodBinding;
import javax.faces.event.ActionEvent;
import javax.servlet.http.HttpServletRequest;
import org.richfaces.component.html.HtmlColumn;
import org.richfaces.component.html.HtmlDataTable;
import org.richfaces.component.html.HtmlDatascroller;
import org.richfaces.component.html.HtmlMenuItem;
import org.richfaces.component.html.HtmlPanel;
import org.richfaces.component.html.HtmlToolBar;
import br.com.gestormed.backingbeans.template.CadastroEndereco;
import br.com.gestormed.backingbeans.template.CadastroPessoa;
import br.com.gestormed.controller.manutencao.CadastroMedicoControlador;
import br.com.gestormed.modelo.entity.Endereco;
import br.com.gestormed.modelo.entity.Medico;
import br.com.gestormed.modelo.entity.Grupo;
import br.com.gestormed.modelo.entity.PermissaoUsuario;
import br.com.gestormed.util.BusinessHelper;
public class CadastroMedico {
// Toolbar com o MenuItem incluir
private HtmlToolBar barraMenu = new HtmlToolBar();
private HtmlMenuItem incluir = new HtmlMenuItem();
// Painel para o filtro de Pesquisa
private HtmlPanel painelFiltroPesquisa = new HtmlPanel();
// Campos de Filtros aqui.....
// Painel para as mensagens ao usuario
private HtmlPanel painelMensagem = new HtmlPanel();
private HtmlGraphicImage imagemMensagem = new HtmlGraphicImage();
private HtmlOutputText textoMensagem = new HtmlOutputText();
// Grid com a lista de objetos Entity
private HtmlDataTable tableList = new HtmlDataTable();
private HtmlDatascroller dataScroller = new HtmlDatascroller();
private List<Medico> lista = new ArrayList<Medico>();
private HtmlColumn colunaAction = new HtmlColumn();
private HtmlOutputLink editLink = new HtmlOutputLink();
private HtmlOutputLink deleteLink = new HtmlOutputLink();
// Painel com o formulario para o cadastro
private HtmlPanel painelCadastroForm = new HtmlPanel();
private HtmlCommandButton botaoSalvar = new HtmlCommandButton();
private HtmlCommandButton botaoAlterar = new HtmlCommandButton();
private HtmlCommandButton botaoCancelar = new HtmlCommandButton();
private HtmlPanel painelMensagemCadastro = new HtmlPanel();
private HtmlOutputText textoMensagemCadastro = new HtmlOutputText();
private HtmlGraphicImage imagemMensagemCadastro = new HtmlGraphicImage();
private Medico obj;
private CadastroPessoa cadastroPessoa;
private CadastroEndereco cadastroEndereco;
public CadastroMedico() {
if(BusinessHelper.validaTela(Grupo.MEDICO) == true) {
painelCadastroForm.setRendered(false);
painelMensagem.setRendered(false);
botaoAlterar.setRendered(false);
for(PermissaoUsuario p : BusinessHelper.getSessionBean().getUsuarioLogado().getPermissoes()) {
if(p.getGrupo().getIdGrupo() == Grupo.ADMINISTRADOR) {
incluir.setRendered(true);
break;
}
if(p.getGrupo().getIdGrupo() == Grupo.MEDICO) {
if(p.isInserir() == true) {
incluir.setRendered(true);
} else {
incluir.setRendered(false);
}
if(p.isAlterar() == true) {
this.editLink.setRendered(true);
} else {
this.editLink.setRendered(false);
}
if(p.isExcluir() == true) {
this.deleteLink.setRendered(true);
} else {
this.deleteLink.setRendered(false);
}
if(p.isVisualizar() == true && p.isAlterar() == false) {
this.editLink.setRendered(true);
}
if(p.isExcluir() == false && p.isAlterar() == false && p.isVisualizar() == false) {
colunaAction.setRendered(false);
}
}
}
if(lista != null && lista.size() > 0) {
tableList.setRendered(true);
} else {
tableList.setRendered(false);
}
actionTable();
} else {
BusinessHelper.logOff();
}
}
public HtmlToolBar getBarraMenu() {
return barraMenu;
}
public void setBarraMenu(HtmlToolBar barraMenu) {
this.barraMenu = barraMenu;
}
public String incluir() {
return null;
}
public HtmlMenuItem getIncluir() {
MethodBinding mb = FacesContext.getCurrentInstance().getApplication().
createMethodBinding("#{cadastroMedico.incluirRegistro}", new Class[0]);
incluir.setAction(mb);
return incluir;
}
public void setIncluir(HtmlMenuItem incluir) {
this.incluir = incluir;
}
public CadastroEndereco getCadastroEndereco() {
if(this.cadastroEndereco != null) {
return this.cadastroEndereco;
} else {
HttpServletRequest req = (HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest();
this.cadastroEndereco = (CadastroEndereco)req.getAttribute("cadastroEndereco");
if(this.cadastroEndereco == null) {
this.cadastroEndereco = new CadastroEndereco();
req.setAttribute("cadastroEndereco", this.cadastroEndereco);
}
return cadastroEndereco;
}
}
public void setCadastroEndereco(CadastroEndereco cadastroEndereco) {
this.cadastroEndereco = cadastroEndereco;
}
public CadastroPessoa getCadastroPessoa() {
if(this.cadastroPessoa != null) {
return this.cadastroPessoa;
} else {
HttpServletRequest req = (HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest();
this.cadastroPessoa = (CadastroPessoa)req.getAttribute("cadastroPessoa");
if(this.cadastroPessoa == null) {
this.cadastroPessoa = new CadastroPessoa();
req.setAttribute("cadastroPessoa", this.cadastroPessoa);
}
return this.cadastroPessoa;
}
}
public void setCadastroPessoa(CadastroPessoa cadastroPessoa) {
this.cadastroPessoa = cadastroPessoa;
}
public HtmlPanel getPainelFiltroPesquisa() {
return painelFiltroPesquisa;
}
public void setPainelFiltroPesquisa(HtmlPanel painelFiltroPesquisa) {
this.painelFiltroPesquisa = painelFiltroPesquisa;
}
public HtmlPanel getPainelMensagem() {
return painelMensagem;
}
public void setPainelMensagem(HtmlPanel painelMensagem) {
this.painelMensagem = painelMensagem;
}
public Medico getObj() {
if(this.obj != null) {
return obj;
} else {
this.obj = new Medico();
return obj;
}
}
public void setObj(Medico obj) {
this.obj = obj;
}
public HtmlGraphicImage getImagemMensagem() {
return imagemMensagem;
}
public void setImagemMensagem(HtmlGraphicImage imagemMensagem) {
this.imagemMensagem = imagemMensagem;
}
public HtmlOutputText getTextoMensagem() {
return textoMensagem;
}
public void setTextoMensagem(HtmlOutputText textoMensagem) {
this.textoMensagem = textoMensagem;
}
public HtmlPanel getPainelMensagemCadastro() {
return painelMensagemCadastro;
}
public void setPainelMensagemCadastro(HtmlPanel painelMensagemCadastro) {
this.painelMensagemCadastro = painelMensagemCadastro;
}
public HtmlOutputText getTextoMensagemCadastro() {
return textoMensagemCadastro;
}
public void setTextoMensagemCadastro(HtmlOutputText textoMensagemCadastro) {
this.textoMensagemCadastro = textoMensagemCadastro;
}
public HtmlGraphicImage getImagemMensagemCadastro() {
return imagemMensagemCadastro;
}
public void setImagemMensagemCadastro(HtmlGraphicImage imagemMensagemCadastro) {
this.imagemMensagemCadastro = imagemMensagemCadastro;
}
public HtmlDataTable getTableList() {
tableList.setValue(this.getLista());
return tableList;
}
public void setTableList(HtmlDataTable tableList) {
this.tableList = tableList;
}
public HtmlDatascroller getDataScroller() {
return dataScroller;
}
public void setDataScroller(HtmlDatascroller dataScroller) {
this.dataScroller = dataScroller;
}
public List<Medico> getLista() {
return this.lista;
}
public void setLista(List<Medico> lista) {
this.lista = lista;
this.getTableList().setValue(this.getLista());
}
public HtmlColumn getColunaAction() {
return colunaAction;
}
public void setColunaAction(HtmlColumn colunaAction) {
this.colunaAction = colunaAction;
}
public HtmlOutputLink getEditLink() {
return editLink;
}
public void setEditLink(HtmlOutputLink editLink) {
this.editLink = editLink;
}
public HtmlPanel getPainelCadastroForm() {
return painelCadastroForm;
}
public void setPainelCadastroForm(HtmlPanel painelCadastroForm) {
this.painelCadastroForm = painelCadastroForm;
}
public HtmlOutputLink getDeleteLink() {
return deleteLink;
}
public void setDeleteLink(HtmlOutputLink deleteLink) {
this.deleteLink = deleteLink;
}
public HtmlCommandButton getBotaoSalvar() {
MethodBinding mb = FacesContext.getCurrentInstance().getApplication().
createMethodBinding("#{cadastroMedico.insert}", new Class[0]);
botaoSalvar.setAction(mb);
return botaoSalvar;
}
public void setBotaoSalvar(HtmlCommandButton botaoSalvar) {
this.botaoSalvar = botaoSalvar;
}
public HtmlCommandButton getBotaoAlterar() {
MethodBinding mb = FacesContext.getCurrentInstance().getApplication().
createMethodBinding("#{cadastroMedico.update}", new Class[0]);
botaoAlterar.setAction(mb);
return botaoAlterar;
}
public void setBotaoAlterar(HtmlCommandButton botaoAlterar) {
this.botaoAlterar = botaoAlterar;
}
public HtmlCommandButton getBotaoCancelar() {
MethodBinding mb = FacesContext.getCurrentInstance().getApplication().
createMethodBinding("#{cadastroMedico.voltar}", new Class[0]);
botaoCancelar.setAction(mb);
return botaoCancelar;
}
public void setBotaoCancelar(HtmlCommandButton botaoCancelar) {
this.botaoCancelar = botaoCancelar;
}
//#########################################################################
// Pesquisa o usuario pelos criterios de filtro e mostra no DataTable
public String pesquisar() {
CadastroMedicoControlador controlador = new CadastroMedicoControlador(this);
if(controlador.pesquisar()) {
painelMensagem.setRendered(false);
painelCadastroForm.setRendered(false);
tableList.setRendered(true);
} else {
tableList.setRendered(false);
painelCadastroForm.setRendered(false);
imagemMensagem.setUrl("/style/img/icon-warning.gif");
textoMensagem.setValue("Nenhum registro encontrado.");
painelMensagem.setRendered(true);
}
return null;
}
// Metodo utilizado para limpar os campos de filtro
public void limparFiltro(ActionEvent event) {
System.out.println(">>>> LimparFiltro");
}
// Metodo utilizado para limpar os campos do cadastro
public String limparCadastro() {
this.obj = null;
this.getCadastroEndereco().getBairroCombo().resetValue();
this.getCadastroEndereco().getCampoCep().resetValue();
this.getCadastroEndereco().setEndereco(new Endereco());
this.getCadastroEndereco().getEstadoCombo().resetValue();
this.getCadastroEndereco().getLocalidadeCombo().resetValue();
this.getCadastroEndereco().getLogradouroCombo().resetValue();
this.getCadastroEndereco().getPaisCombo().resetValue();
this.getCadastroPessoa().getPessoa().setCelular(null);
this.getCadastroPessoa().getPessoa().setCpf(null);
this.getCadastroPessoa().getPessoa().setDataEmissaoRg(null);
this.getCadastroPessoa().getPessoa().setEmail(null);
this.getCadastroPessoa().getPessoa().setEndereco(null);
this.getCadastroPessoa().getPessoa().setEstadoCivil(null);
this.getCadastroPessoa().getPessoa().setFax(null);
this.getCadastroPessoa().getPessoa().setIdPessoa(null);
this.getCadastroPessoa().getPessoa().setNaturalidade(null);
this.getCadastroPessoa().getPessoa().setNome(null);
this.getCadastroPessoa().getPessoa().setNomeMae(null);
this.getCadastroPessoa().getPessoa().setNomePai(null);
this.getCadastroPessoa().getPessoa().setOrgaoExpedidor(null);
this.getCadastroPessoa().getPessoa().setRg(null);
this.getCadastroPessoa().getPessoa().setTelefone(null);
return null;
}
// Action do botao incluir, abilita e mostra o painel de cadastro
public String incluirRegistro() {
this.limparCadastro();
this.barraMenu.setRendered(false);
this.painelMensagem.setRendered(false);
this.painelMensagemCadastro.setRendered(false);
this.tableList.setRendered(false);
this.painelFiltroPesquisa.setRendered(false);
this.painelCadastroForm.setHeader("Incluir novo médico");
this.painelCadastroForm.setRendered(true);
this.botaoAlterar.setRendered(false);
this.botaoSalvar.setRendered(true);
return null;
}
// Action do botao Voltar/Cancelar, volta para o filtro de pesquisa
public String voltar() {
this.painelCadastroForm.setRendered(false);
this.painelMensagem.setRendered(false);
this.botaoAlterar.setRendered(false);
this.botaoSalvar.setRendered(false);
this.barraMenu.setRendered(true);
this.painelFiltroPesquisa.setRendered(true);
this.pesquisar();
return null;
}
// Action do botao Salvar, salva a entidade com as informacoes preenchidas
public String insert() {
CadastroMedicoControlador controlador = new CadastroMedicoControlador(this);
if(controlador.salvar("insert")) {
imagemMensagem.setUrl("/style/img/button-ok.png");
textoMensagem.setValue("Médico "+this.obj.getNome().toString()+" cadastrado com sucesso.");
this.painelCadastroForm.setRendered(false);
this.barraMenu.setRendered(true);
this.painelFiltroPesquisa.setRendered(true);
this.painelMensagemCadastro.setRendered(false);
this.limparCadastro();
this.pesquisar();
this.painelMensagem.setRendered(true);
return null;
} else {
imagemMensagem.setUrl("/style/img/cancel.png");
textoMensagem.setValue("Erro ao cadastrar médico.");
this.painelCadastroForm.setRendered(false);
this.barraMenu.setRendered(true);
this.painelFiltroPesquisa.setRendered(true);
this.painelMensagemCadastro.setRendered(false);
this.limparCadastro();
this.pesquisar();
this.painelMensagem.setRendered(true);
return null;
}
}
public String update() {
CadastroMedicoControlador controlador = new CadastroMedicoControlador(this);
if(controlador.salvar("alterar")) {
imagemMensagem.setUrl("/style/img/button-ok.png");
textoMensagem.setValue("Médico "+this.obj.getNome().toString()+" cadastrado com sucesso.");
this.painelCadastroForm.setRendered(false);
this.barraMenu.setRendered(true);
this.painelFiltroPesquisa.setRendered(true);
this.painelMensagemCadastro.setRendered(false);
this.limparCadastro();
this.pesquisar();
this.painelMensagem.setRendered(true);
return null;
} else {
imagemMensagem.setUrl("/style/img/cancel.png");
textoMensagem.setValue("Erro ao cadastrar médico.");
this.painelCadastroForm.setRendered(false);
this.barraMenu.setRendered(true);
this.painelFiltroPesquisa.setRendered(true);
this.painelMensagemCadastro.setRendered(false);
this.limparCadastro();
this.pesquisar();
this.painelMensagem.setRendered(true);
return null;
}
}
// Action do dataTable, utilizado para excluir ou alterar/visualizar um registro
// Caso a action seja alterar, entao os dados sao carregados no painel de cadastro
public void actionTable() {
HttpServletRequest req = (HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest();
String action = req.getParameter("action");
String id = req.getParameter("id");
if(action != null && !action.equals("") && id != null && !id.equals("")) {
CadastroMedicoControlador controlador = new CadastroMedicoControlador(this);
if(action.equals("alterar")) {
if(controlador.preencherFormulario(Integer.valueOf(id))) {
this.barraMenu.setRendered(false);
this.tableList.setRendered(false);
this.painelFiltroPesquisa.setRendered(false);
this.painelCadastroForm.setHeader("Alterar Médico");
this.painelMensagemCadastro.setRendered(false);
this.botaoSalvar.setRendered(false);
this.botaoAlterar.setRendered(true);
this.painelCadastroForm.setRendered(true);
}
} else if(action.equals("excluir")) {
this.delete(Integer.valueOf(id));
}
}
}
// Chamado por actionTable caso tenha que excluir o registro corrente
private void delete(int idMedico) {
CadastroMedicoControlador controlador = new CadastroMedicoControlador(this);
if(controlador.delete(idMedico)){
imagemMensagem.setUrl("/style/img/button-ok.png");
textoMensagem.setValue("Registro deletado com sucesso.");
this.pesquisar();
painelMensagem.setRendered(true);
} else {
imagemMensagem.setUrl("/style/img/cancel.png");
textoMensagem.setValue("Erro ao deletar registro.");
this.pesquisar();
painelMensagem.setRendered(true);
}
}
}
CadastroConvenio.java
package br.com.gestormed.backingbeans.template;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpServletRequest;
import br.com.gestormed.modelo.entity.Convenio;
public class CadastroConvenio {
private Convenio convenio;
private Convenio currentItem;
private int currentRow;
private List<Convenio> convenios;
private Set<Integer> keys = new HashSet<Integer>();
public CadastroConvenio() {
}
public Convenio getConvenio() {
if(this.convenio != null) {
return convenio;
} else {
this.convenio = new Convenio();
return convenio;
}
}
public void setConvenio(Convenio convenio) {
this.convenio = convenio;
}
public List<Convenio> getConvenios() {
synchronized (this) {
if(this.convenios == null) {
this.convenios = new ArrayList<Convenio>();
this.convenios.add(new Convenio(1, "Descrição Convênio", "123456", new Date(), "123456789"));
this.convenios.add(new Convenio(2, "Descrição Convênio 2", "654321", new Date(), "987654321"));
return convenios;
} else {
return convenios;
}
}
}
public void setConvenios(List<Convenio> convenios) {
this.convenios = convenios;
}
public Set<Integer> getKeys() {
return keys;
}
public void setKeys(Set<Integer> keys) {
this.keys = keys;
}
public Convenio getCurrentItem() {
if(this.currentItem == null) {
return this.currentItem = new Convenio();
} else {
return currentItem;
}
}
public void setCurrentItem(Convenio currentItem) {
this.currentItem = currentItem;
}
public int getCurrentRow() {
return currentRow;
}
public void setCurrentRow(int currentRow) {
this.currentRow = currentRow;
}
public void store() {
convenios.set(currentRow, currentItem);
keys.clear();
keys.add(currentRow);
System.out.println(">>> STORE <<<<");
}
public void delete() {
this.getConvenios().remove(currentRow);
System.out.println(">>> DELETE <<<<");
}
}
CadastroMedico está no scopo de Request
CadastroConvenio está no scopo de Session
Se alguém puder me ajudar eu agradeço.