modalPanel não atualiza valores usando Facelets

0 respostas
cristianopagani

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.

Criado 7 de agosto de 2009
Respostas 0
Participantes 1