<a4j:keepAlive> não funciona com <rich:panel>

2 respostas
rimolive

Pessoal,

Estou usando um modalPanel para renderizar um dataTable de CEPs, cada CEP é um a4j:commandLink que popula e faz um reRender nos componentes da página principal, mas quando eu clico em salvar, ele não carrega os dados do CEP. Já tentei usar a4j:keepAlive mas não fez muito efeito.

Alguém já fez isso e sabe como resolver meu problema?

2 Respostas

Naruffy

coloca os componentes que vc quer renderizar dentro do rich:panel e depois faz o reRender apenas nessa rich:panel

rimolive

ok, eu fiz isso e não funcionou…

Pra ficar mais fácil, segue abaixo o meu código:

  • cadEmpresa.xhtml:
<?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:rich="http://richfaces.org/rich"
		xmlns:a4j="http://richfaces.org/a4j"
		xmlns:ui="http://java.sun.com/jsf/facelets">
<f:view>
	<ui:composition template="/layout/layout1.xhtml">
		<ui:define name="body">
			<a4j:form id="empresaForm">
				<a4j:keepAlive ajaxOnly="true" beanName="empresaBean" />
				<a4j:include viewId="/pages/panel.xhtml" />
				<rich:panel id="empresaPanel" style="height: 385px;">
					<h:inputHidden id="formEmpresaId" value="#{empresaBean.empresa.id}" />
					<h:panelGrid columns="2">
						<h:outputText value="Nome:" />
						<h:inputText size="30" value="#{empresaBean.empresa.nome}" />
						<h:outputText value="Razão Social:" />
						<h:inputText size="50" value="#{empresaBean.empresa.razaoSocial}" />
						<h:outputText value="CNPJ:" />
						<h:inputText size="15" value="#{empresaBean.empresa.cnpj}" />
						<h:outputText value="Inscrição Estadual:" />
						<h:inputText size="15" value="#{empresaBean.empresa.inscricaoEstadual}" />
						<h:outputText value="Endereço:" />
						<h:panelGroup id="endereco1">
							<h:inputText id="logradouro" value="#{empresaBean.empresa.endereco.logradouro}" size="50" readonly="true" />&#160;
							<h:graphicImage value="/images/viewmag.png" style="cursor: pointer;" onclick="javascript:Richfaces.showModalPanel('cepResPanel');" />
						</h:panelGroup>
						<h:outputText value="CEP: " />
						<h:panelGroup id="endereco2">
							<h:inputText id="cep" value="#{empresaBean.empresa.endereco.cep}" size="10" readonly="true" />&#160;
							<h:outputText value="Número: " />&#160;
							<h:inputText value="#{empresaBean.empresa.numero}" size="10" />&#160;
							<h:outputText value="Complemento: " />&#160;
							<h:inputText value="#{empresaBean.empresa.complemento}" size="10" />
						</h:panelGroup>
						<h:outputText value="Bairro: " />
						<h:inputText id="bairro" value="#{empresaBean.empresa.endereco.bairro}" size="30" readonly="true" />
						<h:outputText value="Cidade: " />
						<h:panelGroup id="endereco3">
							<h:inputText id="cidade" value="#{empresaBean.empresa.endereco.cidade}" size="30" readonly="true" />&#160;
							<h:outputText value="Estado: " />&#160;
							<h:inputText id="estado" value="#{empresaBean.empresa.endereco.estado}" size="5" readonly="true" />
						</h:panelGroup>
					</h:panelGrid>
					<f:verbatim>
						<br />
						<br />
					</f:verbatim>
					<h:commandButton id="buttonCadastrarSetor" action="#{empresaBean.cadastrarEmpresa}" value="OK" />
					<h:commandButton id="buttonCancelar" action="#{empresaBean.listarEmpresas}" value="Cancelar" immediate="true" />
				</rich:panel>
			</a4j:form>
		</ui:define>
	</ui:composition>
</f:view>
</html>
  • panel.xhtml
<?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">
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:f="http://java.sun.com/jsf/core"
	xmlns:a4j="http://richfaces.org/a4j"
	xmlns:rich="http://richfaces.org/rich"
	xmlns:ui="http://java.sun.com/jsf/facelets">
	<rich:modalPanel id="cepResPanel" width="475" height="275">
		<f:facet name="header">
			<h:outputText value="Pesquisa de CEP" />
		</f:facet>
		<f:facet name="controls">
			<h:commandLink value="X" style="font-face: normal;" onclick="Richfaces.hideModalPanel('cepResPanel');" immediate="true" />
		</f:facet>
		<rich:datascroller align="left" for="tableEndereco" maxPages="20" />
		<rich:spacer height="30" />
		<rich:dataTable width="450px" id="tableEndereco" rows="5" value="#{enderecoBean.listEndereco}" var="endereco">
			<rich:column>
				<f:facet name="header">
					<h:outputText styleClass="headerText" value="CEP" />
				</f:facet>
				<a4j:commandLink id="selecionaCepLink" value="#{endereco.cep}" reRender="empresaPanel"
					onclick="Richfaces.hideModalPanel('cepResPanel');" limitToList="true">
					<a4j:actionparam id="paramCep" name="cep" value="#{endereco.cep}" assignTo="#{empresaBean.empresa.endereco.cep}" />
					<a4j:actionparam id="paramLogradouro" name="logradouro" value="#{endereco.logradouro}" assignTo="#{empresaBean.empresa.endereco.logradouro}" />
					<a4j:actionparam id="paramBairro" name="bairro" value="#{endereco.bairro}" assignTo="#{empresaBean.empresa.endereco.bairro}" />
					<a4j:actionparam id="paramCidade" name="cidade" value="#{endereco.cidade}" assignTo="#{empresaBean.empresa.endereco.cidade}" />
					<a4j:actionparam id="paramEstado" name="estado" value="#{endereco.estado}" assignTo="#{empresaBean.empresa.endereco.estado}" />
				</a4j:commandLink>
			</rich:column>
			<rich:column>
				<f:facet name="header">
					<h:outputText styleClass="headerText" value="Logradouro" />
				</f:facet>
				<h:outputText styleClass="headerText" value="#{endereco.logradouro}" />
			</rich:column>
			<rich:column>
				<f:facet name="header">
					<h:outputText styleClass="headerText" value="Bairro" />
				</f:facet>
				<h:outputText styleClass="headerText" value="#{endereco.bairro}" />
			</rich:column>
			<rich:column>
				<f:facet name="header">
					<h:outputText styleClass="headerText" value="Cidade" />
				</f:facet>
				<h:outputText styleClass="headerText" value="#{endereco.cidade}" />
			</rich:column>
			<rich:column>
				<f:facet name="header">
					<h:outputText styleClass="headerText" value="Estado" />
				</f:facet>
				<h:outputText styleClass="headerText" value="#{endereco.estado}" />
			</rich:column>
		</rich:dataTable>
	</rich:modalPanel>
</ui:composition>

EmpresaBean.java

package br.com.empresa.sistema.bean;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.faces.context.FacesContext;

import org.richfaces.component.html.HtmlDataTable;

import br.com.empresa.sistema.NavigationConstants;
import br.com.empresa.sistema.bo.BusinessException;
import br.com.empresa.sistema.delegate.SistemaDelegate;
import br.com.empresa.sistema.to.Empresa;

public class EmpresaBean {
	
	private Empresa empresa = new Empresa();
	
	private List<Empresa> listEmpresas;
	
	private HtmlDataTable dataTable;
	
	private Map<Integer, Boolean> selectedIds = new HashMap<Integer, Boolean>();

	public Empresa getEmpresa() {
		return empresa;
	}

	public void setEmpresa(Empresa empresa) {
		this.empresa = empresa;
	}

	public List<Empresa> getListEmpresas() {
		return listEmpresas;
	}

	public void setListEmpresas(List<Empresa> listEmpresas) {
		this.listEmpresas = listEmpresas;
	}

	public HtmlDataTable getDataTable() {
		return dataTable;
	}

	public void setDataTable(HtmlDataTable dataTable) {
		this.dataTable = dataTable;
	}

	public Map<Integer, Boolean> getSelectedIds() {
		return selectedIds;
	}

	public void setSelectedIds(Map<Integer, Boolean> selectedIds) {
		this.selectedIds = selectedIds;
	}

	public String listarEmpresas() {
		try {
			setListEmpresas(SistemaDelegate.getInstance().listarEmpresas());
			FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("empresas", getListEmpresas());
		} catch (BusinessException e) {
			e.printStackTrace();
		}
		return NavigationConstants.LIST_EMPRESA.toString();
	}

	public String viewNovaEmpresa() {
		return NavigationConstants.VIEW_CAD_EMPRESA.toString();
	}

	public String cadastrarEmpresa() {
		try {
			SistemaDelegate.getInstance().cadastrarEmpresa(getEmpresa());
			listarEmpresas();
		} catch (BusinessException e) {
			e.printStackTrace();
		}
		return NavigationConstants.LIST_EMPRESA.toString();
	}
	
	public String viewAlteraEmpresa() {
		setEmpresa((Empresa) dataTable.getRowData());
		
		return NavigationConstants.VIEW_UPD_EMPRESA.toString();
	}

	public String alterarEmpresa() {
		try {
			SistemaDelegate.getInstance().alterarEmpresa(getEmpresa());
			listarEmpresas();
		} catch (BusinessException e) {
			e.printStackTrace();
		}
		return NavigationConstants.LIST_EMPRESA.toString();
	}

	public String removerEmpresas() {
		try {
			List<Integer> ids = new ArrayList<Integer>();
			for (Integer id : selectedIds.keySet()) {
				if(selectedIds.get(id)) {
					ids.add(id);
				}
			}
			SistemaDelegate.getInstance().removerEmpresa(ids);
			listarEmpresas();
		} catch (BusinessException e) {
			e.printStackTrace();
		}
		return NavigationConstants.LIST_EMPRESA.toString();
	}
	
}
Criado 30 de junho de 2008
Ultima resposta 1 de jul. de 2008
Respostas 2
Participantes 2