Grafico Prime faces JSF grafico some após novo cadastro

0 respostas
jsfprimefacesjava
Mauricio_Assis

Olá pessoal bom dia !!!
Estou criando uma aplicação JSF PrimeFaces e Bootstrap e estou utilizando Graficos do Prime faces Chart View !
Meu MVC funciona da seguinte maneira tenho um na visão uma pagina que o usuario informa dentre quais datas ele deseja gerar o grafico exemplo 01-08-2017 a 10-08-2017 apos isso ele clica em um botão que redireciona para a proxima tela veja no codigo abaixo

<ui:define name=“content”>
<h:form>

<p:growl id="messages" sticky="true" showDetail="true" life="5000" />
			<div class="panel panel-default">
			 <div class="panel-heading"> <h2 style="text-align: center">Gráfico referente ao valor do litro do leite  </h2><br/></div>
			<div class="panel-body" style="margin: auto">
			  <div class="alert alert-info">
		  		<strong>Informação:</strong> Nesta Sessão informe as datas corespondentes, a DATA INICIAL deve sempre ser a menor!
			</div>
		    
		       
			<h:panelGrid columns="2">
			
			<p:outputLabel for="popup" value="Data Inicial" />
	        <p:calendar id="popup"  locale="pt"    pattern="dd/MM/yyyy"  value="#{chartView.dataInicial}" />
	        
			<p:outputLabel for="pou1" value="Data Final" />
	        <p:calendar id="pou1"  locale="pt"    pattern="dd/MM/yyyy"  value="#{chartView.dataFinal}" />
    		</h:panelGrid>
    		
			<p:commandButton value="Buscar"  update="@form"  actionListener="#{chartView.pegarData()}" ajax="false" />
			</div>
		
			</div>
       
	         
	</h:form>			
        </ui:define>

Após isso tenho um Managed bean que faz todo o processo esse MB é do tipo sessionScoped com session funciona perfeitamente porem toda a vez que efetuo um novo cadastro ele nao atualiza no grafico o grafico exibe as informações antigas, até ai sei que é devido ao escopo do bean, mas utilizando o View tem outro quando coloco bean nao exibe nada ele carrega a pagina vazia mas ai printo no console ele por incrivel que pareça ele exibe no console as informações segueo bean meu

@ManagedBean
@SessionScoped
public class ChartView implements Serializable {

private LineChartModel dateModel;
private DAOGenerico dao = new DAOGenerico();
private List<Leite> lista = new ArrayList<>();
private Date dataInicial = new Date();
private Date dataFinal = new Date();
public String novaData, novaData2;

public ChartView() {
	createDateModel();

}

@PostConstruct
public void init() {
    createDateModel();
   
   
}

public LineChartModel getDateModel() {
    return dateModel;
}
 public void pegarData() throws IOException{
	 SimpleDateFormat formatador2 = new SimpleDateFormat("dd/MM/yyyy");
	 FacesContext faces = FacesContext.getCurrentInstance();

	 System.out.println(getDataInicial());
	 
	 SimpleDateFormat formatador = new SimpleDateFormat("yyyy/MM/dd");
	 novaData = formatador.format(dataInicial);
	 novaData2 = formatador.format(dataFinal);
	
	 System.out.println(novaData+" nova data 2 " +novaData2);
 lista = dao.lista(Leite.class);   
	lista = dao.listaCondicao(Leite.class, "dataDoValor BETWEEN ' " + novaData + " ' AND ' " + novaData2 + " ' ");
  	System.out.println("no Preencher ELSE");
    for (Leite leite : lista) {
		System.out.println(leite.getDataDoValor());
	}
    if(lista.size()>=1){
 	   createDateModel();
 	  
 	   novaData = formatador2.format(dataInicial);
       novaData2 = formatador2.format(dataFinal);
 	   FacesContext.getCurrentInstance().getExternalContext().redirect("leiteGrafico.jsf");
     	}else{
     		
 	      	 novaData = formatador2.format(dataInicial);
 	      	 novaData2 = formatador2.format(dataFinal);
 	     	 faces.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO,"","Nenhuma valor cadastrado entre a data "+novaData+" e a data "+novaData2));		
     	}
    }

private void createDateModel() {
	
	FacesContext faces = FacesContext.getCurrentInstance();
	 if(lista !=null){


	    	
         dateModel = new LineChartModel();
         LineChartSeries series1 = new LineChartSeries();
         series1.setLabel("Series 1");

         for (Leite leite : lista) {
         	
         Object valor =	leite.getDataDoValor().toString();
 			series1.set(valor, leite.getValorLitro());
 			dateModel.addSeries(series1);
 			
 			System.out.println(leite.getValorLitro());
 		}
  

      //   SimpleDateFormat formatador = new SimpleDateFormat("yyyy/MM/dd");
        
      	 
          
         //dateModel.setTitle("Varia��o do Valor do litro do Leite");
         
         dateModel.getAxis(AxisType.Y).setLabel("Valor em R$");
         DateAxis axis = new DateAxis("Datas que ouve mudança no valor do Litro do Leite");
         axis.setTickAngle(0);
         axis.setMax(novaData2);
         axis.setTickCount(10);
         
         dateModel.getAxis(AxisType.Y).setTickCount(20);
         dateModel.getAxis(AxisType.Y).setMin(0);
         axis.setTickFormat("%#d, %b %y");
         
          
         dateModel.getAxes().put(AxisType.X, axis);
     	System.out.println("no GRAFICO");
 	
    		
    }else{
    	
   
    }
 	
}

Agora a visão do grafico

<p:growl id="messages" sticky="true" showDetail="true" life="5000" />
           <div class="panel panel-default">
		  <div class="panel-heading"> 
		  <h4 style="text-align: center" >
		  Curva de variação do preço do leite entre <h:outputLabel value="#{chartView.novaData}" />  <h:outputLabel value="#{chartView.novaData2}" />
		  </h4>
		   <br/></div>
		  <div class="panel-body">
          <h:form>
	            <p:chart type="line" model="#{chartView.dateModel}" style="height:400px;"   responsive="true"  />
		</h:form>
		</div>
		</div>

Agora estou com o problema toda a vez que efetuo um novo cadastro de leite e vou tentar exibir as estatisticas no grafico nao exibe ele fica em braco
esse video mostra meu problema

agora não sei oque estou fazendo de errado podem me ajudar?

Criado 10 de agosto de 2017
Respostas 0
Participantes 1