dÚvida: jsf + richfaces + jpa + hibernate

Por favor me ajudem!
Tenho o seguinte problema…

tenho uma página xhtml que lista dados do banco usando uma dataTable richFaces. até ai tudo bem… funciona perfeito. ao lado de cada item da lista tem um a4j:commandButton chamado alterar que ao ser clicado recupera os dados do camarada pelo “id” e abre um Modal panel que deveria ser carregado com esses dados, mas isso não está acontecendo, ele abre o modal panel com os “inputText” vazios… Eis aqui o código:

minha xhtml que contém a dataTable e o modalPanel


<?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:ui="http://java.sun.com/jsf/facelets"
	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">
<head>
<title>::.Lista de clientes Cadastrados</title>
</head>
<body>
<ui:include src="./includes/menusuperior.xhtml" />
<a4j:form>
	<rich:dataTable id="tbclientes" value="#{actionClientes.listaClientes}"
		var="item" rows="10" style="width: 100%;"
		binding="#{actionClientes.table}">
		<f:facet name="header">
			<h:outputText value="Lista de Clientes" />
		</f:facet>
		<rich:column>
			<f:facet name="header">
				<h:outputText value="Nome" />
			</f:facet>
			<h:outputText value="#{item.nome}" />
		</rich:column>
		<rich:column>
			<f:facet name="header">
				<h:outputText value="Endereço" />
			</f:facet>
			<h:outputText value="#{item.endereco}" />
		</rich:column>
		<rich:column>
			<f:facet name="header">
				<h:outputText value="Bairro" />
			</f:facet>
			<h:outputText value="#{item.bairro}" />
		</rich:column>
		<rich:column>
			<f:facet name="header">
				<h:outputText value="Cidade" />
			</f:facet>
			<h:outputText value="#{item.cidade}" />
		</rich:column>
		<rich:column>
			<f:facet name="header">
				<h:outputText value="Uf" />
			</f:facet>
			<h:outputText value="#{item.uf}" />
		</rich:column>
				<rich:column>
			<f:facet name="header">
				<h:outputText value="Alterar" />
			</f:facet>
			<a4j:commandButton image="imagens/alterar_cliente.png"
				alt="Alterar dados do cliente"
				onclick="Richfaces.showModalPanel('panelCliente');"
				action="#{actionClientes.recuperaCliente}">
				<f:param id="idAlterar" name="idAlterar" value="#{item.codCliente}" />
			</a4j:commandButton>
		</rich:column>
		<rich:column>
			<f:facet name="header">
				<h:outputText value="Excluir" />
			</f:facet>
			<h:commandButton image="imagens/delete.png"
				alt="Excluir cadastro do cliente"
				action="#{actionClientes.excluirCliente}">
				<f:param id="id" name="id" value="#{item.codCliente}" />
			</h:commandButton>
		</rich:column>
	</rich:dataTable>
	<rich:datascroller align="left" for="tbclientes" />
</a4j:form>
<h:messages showDetail="false" showSummary="true" layout="table"
	infoStyle="color:blue; font-family:verdana; font-size:11px;" />


<!-- Modal Panel para alteração dos dados do cliente -->
<a4j:form>
	<rich:modalPanel id="panelCliente" width="700" height="400">
		<f:facet name="header">
			<h:outputText value="Alteração Cadastral" />
		</f:facet>
		<f:facet name="controls">
			<h:graphicImage value="/imagens/close.png"
				onclick="Richfaces.hideModalPanel('panelCliente')" />
		</f:facet>
		<h:panelGrid columns="4" id="alterar" value="" var="">
			<h:column>
				<h:outputText value="Nome:" />
			</h:column>
			<h:column>
				<h:inputText value="#{item.nome}" required="true"
					requiredMessage="Preencha o campo Nome" size="40" />
			</h:column>
			<h:column>
				<h:outputText value="Endereço:" />
			</h:column>
			<h:column>
				<h:inputText value="#{item.endereco}" size="40" />
			</h:column>
			<h:column>
				<h:outputText value="Bairro:" />
			</h:column>
			<h:column>
				<h:inputText value="#{item.bairro}" />
			</h:column>
			<h:column>
				<h:outputText value="Cidade:" />
			</h:column>
			<h:column>
				<h:inputText value="#{item.cidade}" />
			</h:column>
			<h:column>
				<h:outputText value="UF:" />
			</h:column>
			<h:column>
				<h:inputText value="#{item.uf}" maxlength="2"
					size="2" />
			</h:column>
		</h:panelGrid>
		<a4j:commandButton value="Alterar" id="idAlterar"
			action="#{actionClientes.atualizarClientes}">
		</a4j:commandButton>
		<rich:componentControl for="alterarCliente" attachTo="alterar"
			operation="show" event="onclick" />
	</rich:modalPanel>
</a4j:form>
<!-- Fim do modal panel -->

</body>
</html>

minha action com o método que recupera os dados


public Clientes recuperaCliente(){
		
		Clientes beanCliente = null;
		try {
			beanCliente = (Clientes)((HttpServletRequest)
                                                FacesContext.getCurrentInstance().getExternalContext().getRequest()).getAttribute("item");
			BOCliente bo = new BOCliente();
			beanCliente = bo.recuperaCliente(beanCliente);
			
		} catch (Exception e) {
			e.printStackTrace();
			FacesContext.getCurrentInstance().addMessage("erro",
					new FacesMessage("Falha ao recuperar registro do cliente!"));
		}
		
		return beanCliente;
	}

já fiz o debug e meu bean tá chegando carregado direitinho…

Qualquer ajuda ficarei grato!!

ola,

Tenta fazer assim:

  <a4j:commandButton action="#{actionClientes.recuperaCliente}" image="imagens/alterar_cliente.png"
                  reRender="painelClientes" alt="Alterar dados do cliente" oncomplete="Richfaces.showModalPanel('panelCliente')">  
                <f:param id="idAlterar" name="idAlterar" value="#{item.codCliente}" />
 </a4j:commandButton>  

eh so isso para dar certo. se nao der certo envolve teu rich:modalPanel com um <h:panelGroup id=“panelCliente”> e usa esse id no reRender que eh para dar certo.

Só uma coisa… O que faz esse reRender?

o reRender é uma funcionalidade para atualizar o componente usando AJAX. Quando voce aciona o botao ele vai renderizar o componente que voce atribuiu novamente antes de abri-lo, no seu caso, trocar os valores para o do item selecionado. Se com o reRender nao funcionar é porque no seu metodo ele nao esta colocando o objeto=null no fim do metodo.

Lembrando que o reRender atualiza qualquer componente que voce tenha registrado um ID. Tabelas, Modais, Input, output, painelGroup.

Cara, só uma pergunta, vc já resolveu seu problema?

exemplo de crud com modalpanel

http://livedemo.exadel.com/richfaces-demo/richfaces/dataTable.jsf?tab=editDataTable&cid=2566534

flw

Foi mal Galera… Fiquei Off um tempinho ai e nem respondi…
Resolvi meu problema sim… Dei uma olhada no Link que o Vitenho passou do liveDemo e descobri também um componente chamado UIDATA…
Depois posto o código ai pra ajudar outras pessoas!!

Vlws galera!

Aqui está a solução pessoal… Desculpem a demora… Creio que vá ajudar algumas pessoas!!

Esse cara eu já tinha mas não tava usando…

private Clientes clientes = new Clientes();
	
	public Clientes getClientes() {
		return clientes;
	}

	public void setClientes(Clientes clientes) {
		this.clientes = clientes;
	}

depois adaptei o método de recuperar para void e atribui pra minha váriável clientes o meu beanCliente… this.clientes = beanCliente:

public void recuperaCliente(){
		
		Clientes beanCliente = new Clientes();
		try {
			beanCliente = (Clientes)((HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest()).getAttribute("item");
			
		} catch (Exception e) {
			e.printStackTrace();
			FacesContext.getCurrentInstance().addMessage("erro",
					new FacesMessage("Falha ao recuperar registro do cliente!"));
		}
		
		this.clientes = beanCliente;
	}

meu command button permaneceu no mesmo esquema

<a4j:commandButton image="imagens/alterar_cliente.png"
				alt="Alterar dados do cliente"
				action="#{actionClientes.recuperaCliente}"
				reRender="panelCliente"
				oncomplete="Richfaces.showModalPanel('panelCliente');">
				<f:param id="idAlterar" name="idAlterar" value="#{item.codCliente}" />
			</a4j:commandButton>

e no modal ficou eu alterei o value para:

<a4j:form id="formModal" ajaxSubmit="true" reRender="panelCliente">
		<h:panelGrid columns="4" id="alterar">
			<h:column>
				<h:outputText value="Nome:" />
			</h:column>
			<h:column>
				<h:inputText value="#{actionClientes.clientes.nome}" required="true"
					requiredMessage="Preencha o campo Nome" size="40" />
			</h:column>

Funcionoou uma blz!!