reRender ajax problema

10 respostas
Deluxe

Bom dia a todos..

Em uma mesma janela eu tenho um cadastro, e baixo do cadastro eu tenho um dataTable.. resumindo, quando for cadastrado é atualizado o dataTable embaixo
<f:view>
		<a4j:region>
				<a4j:outputPanel id="msg">
					<br>
					<h:messages style="color: red"/> 
					<br>
				</a4j:outputPanel>
		<a4j:outputPanel id="saida" >
		<h:form id="cadastro">

			<hr>
			<br>
			<br>	
			
			<h:panelGrid columns="2">
			
				                        <h:outputText value="Nome" styleClass="label"></h:outputText>
					 		<h:inputText size="25" value="#{pagamentoBean.pagamento.nomeResponsavel}" />
					 		
					 		<h:outputText value="CPF" styleClass="label"></h:outputText>
					 		<h:inputText size="25" value="#{pagamentoBean.pagamento.cpf}" />
					 		
					 
			</h:panelGrid>
			
			<a4j:commandButton value="Salvar" action="#{pagamentoBean.createOrUpdatePagamento}" reRender="saida,msg" rendered="true"/>
			
				<br>
			  	<br>
			  	<hr>
			  
			  	<rich:dataTable  value="#{pagamentoBean.allPagamento}"  var="pagamento">
			  	
			  			<f:facet name="header">
								 <rich:columnGroup>  
									<rich:column>  
				                   		 <b><h:outputText styleClass="headerText" value="NOME" /></b>
				   	                </rich:column>  				            	                  
				                 </rich:columnGroup>
				            </f:facet>
			  			
			  			<rich:column> 
								<h:outputText value="#{pagamento.nomeResponsavel}" />
						</rich:column>		
							
			  	
			  	</rich:dataTable> 
		</h:form>
		</a4j:outputPanel>
		</a4j:region>	
	</f:view>

Após clikar em salvar teria que reRender no painel..
mas isso nao acontece
estou fazendo errado?

10 Respostas

Deluxe

alguem sabe outro jeito entao…
eu so quero cadastrar, e quando salvar atualizar o dataTable embaixo…

S

Bom Dia,

É o seguinte tenta fazer as seguintes alterações:

coloque um id para o seu <a4j:region> a region necessita de uma identificação:

Exemplo:

&lt;a4j:region id="ajaxCadastro"&gt;

Depois na chamada do botão altere para:

&lt;a4j:commandButton value="Salvar" action="#{pagamentoBean.createOrUpdatePagamento}" reRender="ajaxCadastro" rendered="true"/&gt;

A chamada para a utilização do ajax tem que ser baseada em cima da region e não do outputPanel;

Espero ter ajudado,

Grato,

finotti

vc tem que definir um id para o datatable

&lt;rich:dataTable id="tabela" value="#{pagamentoBean.allPagamento}" var="pagamento"&gt;
e passar esse id para o reRender do botão.

&lt;a4j:commandButton value="Salvar" action="#{pagamentoBean.createOrUpdatePagamento}" reRender="tabela,saida,msg" rendered="true"/&gt;

Deluxe

Coloquei um outputPanel so pro dataTable,
mas ainda continua o problema,
eu cadastro normamente, mas meu dataTable nao atualiza.

<f:view>
		<a4j:region id="ajaxCadastro">
				<a4j:outputPanel id="msg">
					<br>
					<h:messages style="color: red"/> 
					<br>
				</a4j:outputPanel>
		<h:form id="cadastro">

			<hr>
			<br>
			<br>	
			
			<h:panelGrid columns="2">
			
				                        <h:outputText value="Nome" styleClass="label"></h:outputText>
					 		<h:inputText size="25" value="#{pagamentoBean.pagamento.nomeResponsavel}" />
					 		
					 		<h:outputText value="CPF" styleClass="label"></h:outputText>
					 		<h:inputText size="25" value="#{pagamentoBean.pagamento.cpf}" />
					 		
					 
			</h:panelGrid>
			
			<a4j:commandButton value="Salvar" action="#{pagamentoBean.createOrUpdatePagamento}" reRender="data,saida,msg,ajaxCadastro" rendered="true"/>
			
				<br>
			  	<br>
			  	<hr>
			 <a4j:outputPanel id="saida" >
			  	<rich:dataTable  value="#{pagamentoBean.allPagamento}"  var="pagamento">
			  	
			  			<f:facet name="header">
								 <rich:columnGroup>  
									<rich:column>  
				                   		 <b><h:outputText styleClass="headerText" value="NOME" /></b>
				   	                </rich:column>  				            	                  
				                 </rich:columnGroup>
				            </f:facet>
			  			
			  			<rich:column> 
								<h:outputText value="#{pagamento.nomeResponsavel}" />
						</rich:column>			  	
			  	</rich:dataTable> 
		</a4j:outputPanel>
		</h:form>
		</a4j:region>	
	</f:view>
S

Bom Dia,

Vamus fazer mais esta alteração e seja que deus quiser hehe:

Acrescenta mais o seguinte codigo:

ajaxSingle=“true”

No coidgo abaixo:

&lt;a4j:region id="ajaxCadastro" ajaxSingle="true"&gt;

Ve o resultado.

Abcss T+

Deluxe

nao existe ajaxSingle no a4j:region

fiz um novo exemplo

<%@taglib uri="http://java.sun.com/jsf/html" prefix="h"%>
<%@taglib uri="http://java.sun.com/jsf/core" prefix="f"%>
<%@taglib uri="http://richfaces.org/a4j" prefix="a4j"%>
<%@taglib uri="http://java.sun.com/jstl/core_rt" prefix="c"%>
<%@taglib uri="http://richfaces.org/rich" prefix="rich"%>
<%@page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<f:view>
	<a4j:region id="reg">
		<a4j:outputPanel id="msg">
			<h:messages style="color: red"/> 
		</a4j:outputPanel>
		<a4j:outputPanel id="saida" >
		<a4j:form id="cadastro">
			<h:panelGrid columns="2">
				<f:facet name="header">
					<h:outputText value="Pagamentos" />
				</f:facet>
				<h:outputText value="Nome:" />
				<h:inputText size="25" value="#{pagamentoBean.pagamento.nomeResponsavel}" />
			</h:panelGrid>

			<a4j:commandButton value="Salvar" action="#{pagamentoBean.createOrUpdatePagamento}" reRender="saida,msg,reg"/>					

		    <h:dataTable value="#{pagamentoBean.allPagamento}" var="item">
            		<f:facet name="header">
						<h:outputText value="PAGAMENTOS"/>
					</f:facet>
                    <h:column>
                        <f:facet name="header">
                            <h:outputText value="Nome"/>
                        </f:facet>
						<h:outputText value="#{item.nomeResponsavel}"/>
                    </h:column>
                          
                </h:dataTable>
		</a4j:form>
		</a4j:outputPanel>
	</a4j:region>
</f:view>
</body>
</html>

ja coloquei ID no dataTable e no region, mas quando cliko em Salvar, ele cadastra novamente mas minha dataTable nao atualiza

=(

ftabah
Deluxe:
nao existe ajaxSingle no a4j:region

fiz um novo exemplo

<%@taglib uri="http://java.sun.com/jsf/html" prefix="h"%>
<%@taglib uri="http://java.sun.com/jsf/core" prefix="f"%>
<%@taglib uri="http://richfaces.org/a4j" prefix="a4j"%>
<%@taglib uri="http://java.sun.com/jstl/core_rt" prefix="c"%>
<%@taglib uri="http://richfaces.org/rich" prefix="rich"%>
<%@page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<f:view>
	<a4j:region id="reg">
		<a4j:outputPanel id="msg">
			<h:messages style="color: red"/> 
		</a4j:outputPanel>
		<a4j:outputPanel id="saida" >
		<a4j:form id="cadastro">
			<h:panelGrid columns="2">
				<f:facet name="header">
					<h:outputText value="Pagamentos" />
				</f:facet>
				<h:outputText value="Nome:" />
				<h:inputText size="25" value="#{pagamentoBean.pagamento.nomeResponsavel}" />
			</h:panelGrid>

			<a4j:commandButton value="Salvar" action="#{pagamentoBean.createOrUpdatePagamento}" reRender="saida,msg,reg"/>					

		    <h:dataTable value="#{pagamentoBean.allPagamento}" var="item">
            		<f:facet name="header">
						<h:outputText value="PAGAMENTOS"/>
					</f:facet>
                    <h:column>
                        <f:facet name="header">
                            <h:outputText value="Nome"/>
                        </f:facet>
						<h:outputText value="#{item.nomeResponsavel}"/>
                    </h:column>
                          
                </h:dataTable>
		</a4j:form>
		</a4j:outputPanel>
	</a4j:region>
</f:view>
</body>
</html>

ja coloquei ID no dataTable e no region, mas quando cliko em Salvar, ele cadastra novamente mas minha dataTable nao atualiza

=(

Olá amigo, #{pagamentoBean.allPagamento} é um método que retorna uma lista, certo? Você está executando-o novamente antes de dar um reRender?
Porque mesmo após o cadastro, pode ser que o bean não esteja atualizando a lista, certo?

Abraço!

Deluxe

ai cara
tava renderizando…
o problema é pq a lista nao vinha atualizada…
que newbie
hehe
vivendo e aprendendo…
vlw
=)

ftabah

Deluxe:
ai cara
tava renderizando…
o problema é pq a lista nao vinha atualizada…
que newbie
hehe
vivendo e aprendendo…
vlw
=)

imagina, a gente aprende ‘errnado’ mesmo.
comigo isso já aconteceu também e pra descobrir foi um saco, hahaha!
abs! :thumbup:

C

Olá, acho que estou com o mesmo problema…como vc. conseguiu atualizar a lista na renderização?

Segue meu código:

<a4j:form id=“palavraForm” ajaxSubmit=“true”>

<a>a4j:region</a>

<h:outputText value=“Palavra-chave:”/>


<h:inputText id=“palavraChave” size=“20” value="#{DocumentoBean.palavraChave}"/>

<a4j:commandButton id=“adicionarPalavraBt” value=" + “>

<a4j:support event=“onclick” actionListener=”#{DocumentoBean.adicionarPalavraChave}"

reRender=“out,palavraChave” ajaxSingle=“true”/>

</a4j:commandButton>
<a4j:outputPanel id="out" rendered="true">
            <h:dataTable id="palavrasChave" var="dataItem" value="#{DocumentoBean.adicionarPalavraChave}">
                    <h:column><h:outputText value="#{dataItem}"/></h:column>
            </h:dataTable>
     </a4j:outputPanel>
</a4j:region>

</a4j:form>

Código do bean (session escopo )

public void adicionarPalavraChave(ActionEvent event) {
    palavrasChave.add(this.palavraChave);
    this.palavraChave = "";
}

obrigada pelo ajuda!

Criado 30 de abril de 2009
Ultima resposta 19 de jun. de 2009
Respostas 10
Participantes 5