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á <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?