[RESOLVIDO] Atualizar DataTable + Primefaces 3.0

Boa noite galera do forum, seguinte na pagina que estou desenvolvendo eu faço o upload do arquivo e tenho um botão de ação para remover um ponto… Ele chega a remover o ponto eu mando fazer um update da tela mais ele não atualiza a tela… testando ele remover o ponto normalmente e caso você de um F5, ele retira o ponto da tela e do gráfico também, alguém saberia me dizer o que posso fazer para que a tela atualize sozinha, ou de um update no Gráfico e na Tabela…

HTML

<h:body>
        
        
    <h:form enctype="multipart/form-data">  
  
        <p:fileUpload id="fileupload" fileUploadListener="#{Controle.importaArquivo}" widgetVar="fileupload"
                      label="Selecionar"  uploadLabel="Enviar" cancelLabel="Cancelar"
                      
                      update="growl,tabela,graficoMedia,graficoAmplitude" mode="advanced" />
        
        <p:growl id="growl" showDetail="true" life="3000"/>  
        
        
        <p:dataTable id="tabela" var="Ponto" value="#{Controle.listarPontos}">
            <p:column>
                <f:facet name="header"> 
                    <h:outputText value="Posição" />
                </f:facet>
                <h:outputText value="#{Ponto.posicao}" />
            </p:column>
                <p:column>
                <f:facet name="header">
                    <h:outputText value="Média" />
                </f:facet>
                    <h:outputText value="#{Ponto.media}" />
            </p:column>
            <p:column>
                <f:facet name="header">
                    <h:outputText value="Amplitude" />
                </f:facet>
                <h:outputText value="#{Ponto.variabilidade}" />
            </p:column>         
            <p:column>
                <f:facet name="header">
                    <h:outputText value="Excluir Grafico" />
                </f:facet>
                <p:selectBooleanCheckbox value="#{Ponto.exclusaoDesvioPadrao}" immediate="TRUE" validatorMessage="Excluido" converterMessage="Falhou"/>  
            </p:column>
            <p:column>
               <f:facet name="header">
                    <h:outputText value="Excluir Grafico" />
                </f:facet>
                <p:selectBooleanCheckbox value="#{Ponto.exclusaoAmplitude}" immediate="TRUE" validatorMessage="Excluido" converterMessage="Falhou"/>  
            </p:column>
            <p:column>
                <f:facet name="header">
                    <h:outputText value="Excluir Grafico" />
                </f:facet>
                <p:selectBooleanCheckbox value="#{Ponto.exclusaoMedia}" immediate="TRUE" validatorMessage="Excluido" converterMessage="Falhou"/>  
            </p:column>
            <p:column>
                 <f:facet name="header">
                     <h:outputText value="Excluir"/>
                 </f:facet>
                <p:commandButton  value="Excluir" action="#{Controle.excluirPonto}" update="tabela,graficoAmplitude" >
                    <f:ajax render="tabela" />  
                </p:commandButton>
            </p:column>
        </p:dataTable>

        <p:lineChart id="graficoAmplitude" value="#{Controle.criaPlanoCartesianoAmplitude}" legendPosition="e"
                     title="Linear Chart" minY="0" maxY="0.06" style="height:500px"/> 

        
    </h:form>                    
    </h:body>

Controle

@ManagedBean(name = "Controle")
@SessionScoped
public class Controller implements Serializable{
    
    private Variaveis variavel;
    private DataModel listaDataModel;
    private ConverteModVariaveis Conver = new ConverteModVariaveis();
    private List<Variaveis> listaVariaveis = new ArrayList<Variaveis>();
    
    
    public void importaArquivo(FileUploadEvent evento) throws IOException{
       
        listaVariaveis = Conver.CriaLista(evento);
        
    }
    
    public DataModel getListarPontos (){       
        listaDataModel = new ListDataModel(listaVariaveis);
//        Verificar a lista para a passagem do parametro
//        for (int i=0;i<listaVariaveis.size();i++)
//        {
//          variavel = listaVariaveis.get(i);
//          System.err.println("Atributo"+variavel.isExclusaoAmplitude());
//        }
        System.err.println(listaVariaveis.size());
//        variavel = (Variaveis) listaVariaveis.get(1);
        return listaDataModel;
    }
    
    public void excluirPonto(){
        Variaveis temp = (Variaveis)listaDataModel.getRowData();
        System.err.println(listaVariaveis.size());
        listaVariaveis.remove(temp);
        System.err.println(listaVariaveis.size());
        System.err.println("Passei!"+temp.getPosicao());  
    }
    
    public CartesianChartModel getCriaPlanoCartesianoMedia(){
        CriaGrafico b = new CriaGrafico();
        return b.criaGraficoMedia(listaVariaveis);
    }
    
    public CartesianChartModel getCriaPlanoCartesianoAmplitude(){
        CriaGrafico a = new CriaGrafico();
        return a.criaGraficoAmplitude(listaVariaveis);
    }
}

[code]<h:body>

<h:form enctype="multipart/form-data" update=":form:display">    

    <p:fileUpload id="fileupload" fileUploadListener="#{Controle.importaArquivo}" widgetVar="fileupload"  
                  label="Selecionar"  uploadLabel="Enviar" cancelLabel="Cancelar"  
                    
                  update="growl,tabela,graficoMedia,graficoAmplitude" mode="advanced" />  
      
    <p:growl id="growl" showDetail="true" life="3000"/>    
      
      
    <p:dataTable var="Ponto" value="#{Controle.listarPontos}" id="display" >  
        <p:column>  
            <f:facet name="header">   
                <h:outputText value="Posição" />  
            </f:facet>  
            <h:outputText value="#{Ponto.posicao}" />  
        </p:column>  
            <p:column>  
            <f:facet name="header">  
                <h:outputText value="Média" />  
            </f:facet>  
                <h:outputText value="#{Ponto.media}" />  
        </p:column>  
        <p:column>  
            <f:facet name="header">  
                <h:outputText value="Amplitude" />  
            </f:facet>  
            <h:outputText value="#{Ponto.variabilidade}" />  
        </p:column>           
        <p:column>  
            <f:facet name="header">  
                <h:outputText value="Excluir Grafico" />  
            </f:facet>  
            <p:selectBooleanCheckbox value="#{Ponto.exclusaoDesvioPadrao}" immediate="TRUE" validatorMessage="Excluido" converterMessage="Falhou"/>    
        </p:column>  
        <p:column>  
           <f:facet name="header">  
                <h:outputText value="Excluir Grafico" />  
            </f:facet>  
            <p:selectBooleanCheckbox value="#{Ponto.exclusaoAmplitude}" immediate="TRUE" validatorMessage="Excluido" converterMessage="Falhou"/>    
        </p:column>  
        <p:column>  
            <f:facet name="header">  
                <h:outputText value="Excluir Grafico" />  
            </f:facet>  
            <p:selectBooleanCheckbox value="#{Ponto.exclusaoMedia}" immediate="TRUE" validatorMessage="Excluido" converterMessage="Falhou"/>    
        </p:column>  
        <p:column>  
             <f:facet name="header">  
                 <h:outputText value="Excluir"/>  
             </f:facet>  
            <p:commandButton  value="Excluir" action="#{Controle.excluirPonto}" update="tabela,graficoAmplitude" >  
                <f:ajax render="tabela" />    
            </p:commandButton>  
        </p:column>  
    </p:dataTable>  

    <p:lineChart id="graficoAmplitude" value="#{Controle.criaPlanoCartesianoAmplitude}" legendPosition="e"  
                 title="Linear Chart" minY="0" maxY="0.06" style="height:500px"/>   

      
</h:form>                      
</h:body>  

[/code]

pronto meu chapa cola isso l[a e testa

Fala michelorth_92 então fiz isso dai que você mandou e não funcionou não, mesmo utilizando seu código ou tentando utilizar o meu não funcionou, e o form não possui o método de update… não sei mais o que fazer ja fiz várias coisas e não adianta, ele não atualiza a tela sem que eu aperte F5

entao eu tenho aki e fiz tmb… estava com o mesmo problema… vo posta o codigo que eu fiz… ai voce ve c da pra tirra como exemplo…

estou usando 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:ui="http://java.sun.com/jsf/facelets"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:f="http://java.sun.com/jsf/core"
	xmlns:p="http://primefaces.prime.com.tr/ui">
<h:head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
	<title>Arquivos</title>
</h:head>
<h:body>
	<h:form enctype="multipart/form-data" update=":form:display">
		
		<div align="center">
			<p:panel header="Arquivos" style="width:1050px">
				<ui:include src="/paginas/Menu.xhtml" />
				<p:messages id="mensagens" showSummary="true" />
				
				<p:fileUpload
					fileUploadListener="#{arquivosBean.fileUploadAction}"
					update="mensagens" multiple="true"  />					
				<br />
				´
				
				
				<p:dataTable var="arquivos" value="#{arquivosBean.listArquivos}"
				widgetVar="arquivosTable"
				emptyMessage="Nenhum arquivos Encontrado Nessas Condições" rowStyleClass="#{empty rowIx or rowIx
 mod 2 ne 0 ? 'even-row' : 'odd-row'}"
 rowIndexVar="rowIx" id="display" >

				<f:facet name="header">
					<p:outputPanel>
						<h:outputText value="Procurar em todos os campos:" />
						<p:inputText id="globalFilter" onkeyup="arquivosTable.filter()"
							style="width:150px" />
					</p:outputPanel>
				</f:facet>

				<p:column filterBy="#{arquivos.id}" headerText="Id" footerText="Id"
					filterMatchMode="contains">
					<h:outputText value="#{arquivos.id}" />
				</p:column>

				<p:column filterBy="#{arquivos.nome}" headerText="Descrição"
					footerText="Descrição" filterMatchMode="contains">
					<h:outputText value="#{arquivos.nome}" />
				</p:column>
				
				<p:column filterBy="#{arquivos.tipo}" headerText="Tipo"
					footerText="Tipo" filterMatchMode="contains">
					<h:outputText value="#{arquivos.tipo}" />
				</p:column>
				
				<p:column filterBy="#{arquivos.tamanho}" headerText="Tamanho"
					footerText="Tamanho" filterMatchMode="contains">
					<h:outputText value="#{arquivos.tamanho}" />
				</p:column>

				

				<p:column style="width:100px">
					<h:panelGrid columns="2" styleClass="actions" cellpadding="2">

						<h:commandButton image="/imagens/icones/download.gif" title="Download">
						<f:setPropertyActionListener value="#{arquivos.id}"
								target="#{arquivosBean.arquivo.id}" />
                        <p:fileDownload value="#{arquivosBean.file}" />  
                    </h:commandButton>  
						
						<h:commandButton image="/imagens/icones/excluir.gif" title="Excluir" action="#{arquivosBean.remove}" >
							<f:setPropertyActionListener value="#{arquivos.id}"
								target="#{arquivosBean.arquivo.id}"/>
						</h:commandButton>
					</h:panelGrid>
				</p:column>
			</p:dataTable>
				
				
				<style>
.ui-datatable .ui-datatable-data .even-row td {
     background-color:#fcefa1;
     border-right: solid 0px #4e6769; 
 }

 .ui-datatable .ui-datatable-data .odd-row td { 
     background-color:#f7f7f7;
     border-right: solid 0px #4e6769; 
 }
</style>
			</p:panel>
		</div>
	</h:form>
</h:body>
</html>


No seu método de excluir o ponto, coloca assim:

public String excluirPonto(){ // faz tudo que tem que fazer return null; }

E só adicionado oq disse acima, para que o código que eu postei funcione, no seu botão remover coloque ajax=“false”

pior no codigo que eu te passei esqueci de colocar ajax=“false” faça isso e teste

Pessoal, mais uma vez realmente agradeço vocês, consegui resolver o problema aqui do jeito que vocês explicaram, por motivos de consulta estou postando o código novamente…

Controller (Mudei o retorno de void para String com a passagem do parametro null)

    public String excluirPonto(){
        Variaveis temp = (Variaveis)listaDataModel.getRowData();
        listaVariaveis.remove(temp);
        return null;
    }

XHTML (Apliquei apenas o ajax=“false”)

            <p:column>
                 <f:facet name="header">
                     <h:outputText value="Excluir"/>
                 </f:facet>
                <p:commandButton  value="Excluir" action="#{Controle.excluirPonto}" update="tabela,graficoAmplitude" ajax="false" />
            </p:column>

Mais uma vez, realmente agradeço a ajuda de todos aqui no forum…

Aproveitando para perguntar, existe alguma opção que assim que eu selecionar um check box, ele mude o valor booleano da variável? sem ter que clicar em um botão?

1 curtida