2012-10-17 3 views
2

데이터를 제출하고 차트가 표시되었습니다.하지만 다시 새 값을 양식에 삽입하여 제출할 때 차트가 업데이트되지 않습니다. 내가 본 또 다른 사항은 페이지를 클릭하면 차트가 업데이트되고 차트에 새로운 값이 표시됩니다.
예를 들어 값을 줄 경우
밀 = 40설탕 = 60
제출하면 차트가 표시됩니다.
이제 밀 = 90Sugar = 10을 제출하면 페이지에 남아있는 이전 차트 만 표시됩니다.
지금 페이지를 새로 고치면 업데이트 된 값이있는 차트를 사용할 수 있습니다. 하나가있는 경우
내가 그 문제를 제거 할 수 있습니까 :(솔루션을 제안 해주십시오.
여기 내 코드입니다
차트 코드프라임 차트가 새 요청을 제출할 때 업데이트되지 않음

<p:barChart id="horizontal" 
         value="#{reportingCharts.categoryModel}" legendPosition="se" 
         style="width:635px;height:500px" title="Horizontal Bar Chart" 
         orientation="horizontal" min="0" max="150" animate="true" 
         zoom="true" barMargin="90" 
         rendered="#{chartsRendering.barCharts}" showDatatip="true" shadow="true" /> 

버튼 코드

<h:commandButton id="btnLanguage" action="#{reportingCharts.getGraphValuesOnLanguageBasis}" 
           value="Plot Chart Language"> 
           </h:commandButton> 

getGraphValuesOnLanbguageBase 방법

public void getGraphValuesOnLanguageBasis() { 

     categoryModel = null; 


      resList = (ArrayList<ChartResult>) serviceObj 
       .getChartByLanguage(ranks, language); 

     if (chartType.equalsIgnoreCase("bar") 
       || chartType.equalsIgnoreCase("line") 
       || chartType.equalsIgnoreCase("column")) { 

      categoryModel = new CartesianChartModel(); 

      ChartSeries langChart = null; 


      for (int a = 0; a < ranks.length; a++) { 

       langChart = new ChartSeries(); 
       if(a == 0){ 
        for(int z=0;z<language.length;z++){ 

         langChart.set(languageMap.get(Integer.parseInt(language[z])),0); 

        } 
        } 

       String rank = ""; 
       boolean rankAvailable = false; 
       for (int x = 0; x < resList.size(); x++) { 

        if(Integer.parseInt(resList.get(x).getRankId()) == Integer.parseInt(ranks[a])){ 
         rank = resList.get(x).getRankName(); 

         x = resList.size(); 
         rankAvailable = true; 

        } 
       } 


       if(rankAvailable == false){ 

        langChart.setLabel(rankMap.get(Integer.parseInt(ranks[a]))); 

       } 
       else{ 

        langChart.setLabel(rank); 
       } 


       for (int x = 0; x < resList.size(); x++) { 


        if (Integer.parseInt(resList.get(x).getRankId()) == Integer 
          .parseInt(ranks[a]) && rankAvailable == true) { 

               langChart.set(languageMap.get(Integer.parseInt(resList.get(x).getCriteria())), Integer 
           .parseInt(resList.get(x).getNoOfPersons())); 


        } 

       } 

       categoryModel.addSeries(langChart); 

      } 

     } else if (chartType.equalsIgnoreCase("pie")) { 



       pieModel = new PieChartModel(); 


       for (int x = 0; x < resList.size(); x++) { 

         pieModel.set(languageMap.get(Integer.parseInt(resList.get(x).getCriteria())), Integer 
           .parseInt(resList.get(x).getNoOfPersons())); 

       } 

     } 
     ChartsRendering chartRenderer1 = (ChartsRendering) FacesContext 
       .getCurrentInstance().getExternalContext().getSessionMap() 
       .get("chartsRendering"); 


     if (chartType.equalsIgnoreCase("bar")) { 
      chartRenderer1.showBarChart(); 

     } else if (chartType.equalsIgnoreCase("line")) 
      chartRenderer1.showLineChart(); 
     else if (chartType.equalsIgnoreCase("column")) 
      chartRenderer1.showColumnChart(); 
     else if (chartType.equalsIgnoreCase("pie")) 
      chartRenderer1.showPieChart(); 

    } 
+0

차트 또는 래퍼를 'update = "chartOrItsWrapperID"'당신이 사용하는 버튼? 귀하의 코드를 게시하십시오 ... – Daniel

+0

물론 확실합니다. 당신이보고 싶은 부분은? – khan

+0

차트를 업데이트 할 것으로 예상되는 버튼과 차트 – Daniel

답변

4

모델 값을 변경 한 후에도 차트가 업데이트되지 않지만 ajax를 통해 update 수 있습니다. 예를 들어 당신이 차트가있는 경우 :이 경우

<p:selectOneMenu id="aMenu" value="#{yourChartBean.menuValue}"> 
    <p:ajax event="change" update="myBarChart" listener="#{yourChartBean.refreshChart()}"/> 
    <f:selectItem itemLabel="This value" itemValue="tv"/> 
    <f:selectItem itemLabel="Another value" itemValue="av"/> 
</p:selectOneMenu> 

: 귀하의 백업 콩에 새 값을 전송

<p:barChart id="myBarChart" value=#{yourChartBean.chartModel} ..../> 

과 selecteOneMenu을, 귀하의 백업 콩에서 모델을 업데이트하는 방법을 정의 페이지가로드 ... 모든 아약스 요청이 제대로 차를 렌더링 후 때

public void refreshChart() { 
    buildChart(); 
} 

private void buildChart() { 
    chartModel = new CartesianChartModel(); 

    ChartSeries series1 = new ChartSeries(); 
    ... 

    ChartSeries series2 = new ChartSeries(); 
    ... 

    categoryModel.addSeries(series1); 
    categoryModel.addSeries(series2); 
} 
+0

필자의 경우이 AJAX 코드는 어디에 사용해야합니까? 버튼? – khan

+0

확실한 것은 버튼이 '

+0

ok akoskm :) thnx chk ..하자. 한 가지 더, khan

2

차트가 표시되어야합니다 다음 refreshChart() 방법은 차트 모델을 업데이트하기위한 것입니다 rt. 이렇게하면 시리즈 1의 경우 (0,0), 시리즈 2의 경우 (0,0)과 같은 더미 시리즈 데이터를 제공하므로 페이지로드가 완료된 후에 모든 것이 올바르게 작동합니다.

관련 문제