2013-08-21 60 views
0

我嘗試使用GoogleChart來顯示趨勢線,基於.java文件生成的一些數據。 我的基本想法是在java文件中創建DataTable,然後通過JSF將此DataTable傳遞給網頁。Google Chart:java.lang.NoClassDefFoundError:com/google/gwt/core/client/JavaScriptObject

這裏是我的代碼部分:

public void resolveEvolution() { 
     this.evolution = new ArrayList<Long>(); 
     this.evolutionTime = new ArrayList<String>(); 
     Calendar first = Calendar.getInstance(); 
     first.setTime(this.start); 
     first.set(Calendar.DAY_OF_MONTH, 1); 
     Calendar last = Calendar.getInstance(); 
     last.setTime(this.end); 

     int i = 0; 

     this.dt = DataTable.create(); 
     dt.addColumn(ColumnType.NUMBER, "Time"); 
     dt.addColumn(ColumnType.NUMBER, "Utilisation"); 
     dt.addRow(); 
     while (first.before(last)) { 
      Calendar endMonth = Calendar.getInstance(); 
      endMonth.setTime(first.getTime()); 
      endMonth.add(Calendar.MONTH, 1); 
      endMonth.add(Calendar.DAY_OF_MONTH, -1); 

      this.evolution 
        .add(actionQueries.countByComponent(this.selectedComponent, 
          first.getTime(), endMonth.getTime())); 
      this.evolutionTime.add(first.get(Calendar.MONTH) + "/" 
        + first.get(Calendar.YEAR)); 
      dt.addRow(); 
      dt.setValue(i, 0, i); 
      dt.setValue(i, 1, 
        actionQueries.countByComponent(this.selectedComponent, 
          first.getTime(), endMonth.getTime())); 
      i++; 
      first.add(Calendar.MONTH, 1); 
     } 
    } 

    public DataTable getDt() { 
     System.out.println(this.dt); 
     return this.dt; 
    } 

而且在我.xhtml文件是這樣的:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:f="http://java.sun.com/jsf/core"> 
    <head>  
<script type="text/javascript" src="https://www.google.com/jsapi"></script>  
<script type="text/javascript">  
    google.load("visualization", "1", {packages:["corechart"]});  
    google.setOnLoadCallback(drawChart);  
    function drawChart() {   
     var data = new google.visualization.DataTable(); 
     data = "#{globalComponentsManager.dt}"; 
     var options = {   
      title: 'Test', 
          trendlines: { 0: {} } 

     };  
     var chart = new google.visualization.ScatterChart(document.getElementById('chart_div')); 

     chart.draw(data, options);  
    }  
    </script> 
</head> 
<body> 
     <div id="chart_div" style="width: 900px; height: 500px;"></div> 
</body> 

</html> 

然而,當我執行在Tomcat的這個應用,它告訴我:

GRAVE: Exception lors de l'envoi de l'évènement contexte initialisé (context initialized) à l'instance de classe d'écoute (listener) org.apache.myfaces.webapp.StartupServletContextListener 
java.lang.NoClassDefFoundError: com/google/gwt/core/client/JavaScriptObject 

什麼問題?非常感謝。

回答

0

我認爲您使用的是錯誤的庫(請參閱java.lang.NoClassDefFoundError: com/google/gwt/core/client/JavaScriptObject錯誤)。

我想resolveEvolution()方法運行在服務器上。
您試圖使用的DataTable用於GWT應用程序,而不是用於後端代碼(JSF)。
取而代之的是gwt-google-apis你應該使用DataTable那就是Data Soruce Java library

+0

是的一部分,我修改了它之後,你說,有沒有這個錯誤。但我仍然無法獲得圖像。也許我不能使用jsf方式將數據從java傳輸到javascript? (就像在我的.xhtml文件中) – Esct

+0

我對'JSF'沒有任何經驗,但它肯定不會讓你嘗試去做。你必須將'DataTable'序列化爲它的JSON結構,然後在''Javascript'代碼中重新創建它。 –