2013-02-02 29 views
0

我嘗試在Java Server Faces 2.0(Apache MyFaces)中使用JavaScript庫'Highcharts 2.3.5'(基於jQuery)。jQuery Highcharts不能使用JSF 2.0

我只是想嘗試一個來自Highcharts示例的基本示例。該示例如下所示:

<!DOCTYPE HTML> 
<html> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
     <title>Highcharts Example</title> 

     <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script> 
     <script type="text/javascript"> 
$(function() { 
    var chart; 
    $(document).ready(function() { 
     chart = new Highcharts.Chart({ 
      chart: { 
       renderTo: 'container', 
       type: 'line', 
       marginRight: 130, 
       marginBottom: 25 
      }, 
      title: { 
       text: 'Monthly Average Temperature', 
       x: -20 //center 
      }, 
      subtitle: { 
       text: 'Source: WorldClimate.com', 
       x: -20 
      }, 
      xAxis: { 
       categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 
        'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'] 
      }, 
      yAxis: { 
       title: { 
        text: 'Temperature (°C)' 
       }, 
       plotLines: [{ 
        value: 0, 
        width: 1, 
        color: '#808080' 
       }] 
      }, 
      tooltip: { 
       formatter: function() { 
         return '<b>'+ this.series.name +'</b><br/>'+ 
         this.x +': '+ this.y +'°C'; 
       } 
      }, 
      legend: { 
       layout: 'vertical', 
       align: 'right', 
       verticalAlign: 'top', 
       x: -10, 
       y: 100, 
       borderWidth: 0 
      }, 
      series: [{ 
       name: 'Tokyo', 
       data: [7.0, 6.9, 9.5, 14.5, 18.2, 21.5, 25.2, 26.5, 23.3, 18.3, 13.9, 9.6] 
      }, { 
       name: 'New York', 
       data: [-0.2, 0.8, 5.7, 11.3, 17.0, 22.0, 24.8, 24.1, 20.1, 14.1, 8.6, 2.5] 
      }, { 
       name: 'Berlin', 
       data: [-0.9, 0.6, 3.5, 8.4, 13.5, 17.0, 18.6, 17.9, 14.3, 9.0, 3.9, 1.0] 
      }, { 
       name: 'London', 
       data: [3.9, 4.2, 5.7, 8.5, 11.9, 15.2, 17.0, 16.6, 14.2, 10.3, 6.6, 4.8] 
      }] 
     }); 
    }); 

}); 
     </script> 
    </head> 
    <body> 
<script src="http://code.highcharts.com/highcharts.js"></script> 
<script src="http://code.highcharts.com/modules/exporting.js"></script> 

<div id="container" style="min-width: 400px; height: 400px; margin: 0 auto"></div> 

    </body> 
</html> 

所以我創建了一個facestemplate:

<!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"> 
<h:head> 
<title><ui:insert name="title">Default title</ui:insert></title> 
<ui:insert name="head"> 
</ui:insert> 
</h:head> 
<h:body> 
    <div id="content"> 
     <ui:insert name="content"> 
     </ui:insert> 
    </div> 
</h:body> 
</html> 

,我用我的Highchart代碼:

<!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"> 


<ui:composition template="/mytemplate.xhtml"> 
    <ui:define name="head"> 
     <script type="text/javascript" 
      src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script> 
     <script type="text/javascript"> 
      $(function() { 
       var chart; 
       $(document) 
         .ready(
           function() { 
            chart = new Highcharts.Chart(
              { 
               chart : { 
                renderTo : 'container', 
                type : 'line', 
                marginRight : 130, 
                marginBottom : 25 
               }, 
               title : { 
                text : 'Monthly Average Temperature', 
                x : -20 
               //center 
               }, 
               subtitle : { 
                text : 'Source: WorldClimate.com', 
                x : -20 
               }, 
               xAxis : { 
                categories : [ 'Jan', 
                  'Feb', 'Mar', 
                  'Apr', 'May', 
                  'Jun', 'Jul', 
                  'Aug', 'Sep', 
                  'Oct', 'Nov', 'Dec' ] 
               }, 
               yAxis : { 
                title : { 
                 text : 'Temperature (°C)' 
                }, 
                plotLines : [ { 
                 value : 0, 
                 width : 1, 
                 color : '#808080' 
                } ] 
               }, 
               tooltip : { 
                formatter : function() { 
                 return '<b>' 
                   + this.series.name 
                   + '</b><br/>t_$ta_$tag' 
                   + this.x + ': ' 
                   + this.y + '°C'; 
                } 
               }, 
               legend : { 
                layout : 'vertical', 
                align : 'right', 
                verticalAlign : 'top', 
                x : -10, 
                y : 100, 
                borderWidth : 0 
               }, 
               series : [ 
                 { 
                  name : 'Tokyo', 
                  data : [ 7.0, 6.9, 
                    9.5, 14.5, 
                    18.2, 21.5, 
                    25.2, 26.5, 
                    23.3, 18.3, 
                    13.9, 9.6 ] 
                 }, 
                 { 
                  name : 'New York', 
                  data : [ -0.2, 0.8, 
                    5.7, 11.3, 
                    17.0, 22.0, 
                    24.8, 24.1, 
                    20.1, 14.1, 
                    8.6, 2.5 ] 
                 }, 
                 { 
                  name : 'Berlin', 
                  data : [ -0.9, 0.6, 
                    3.5, 8.4, 
                    13.5, 17.0, 
                    18.6, 17.9, 
                    14.3, 9.0, 
                    3.9, 1.0 ] 
                 }, 
                 { 
                  name : 'London', 
                  data : [ 3.9, 4.2, 
                    5.7, 8.5, 
                    11.9, 15.2, 
                    17.0, 16.6, 
                    14.2, 10.3, 
                    6.6, 4.8 ] 
                 } ] 
              }); 
           }); }); 
     </script> 
    </ui:define> 

    <ui:define name="content"> 
     <script src="http://code.highcharts.com/highcharts.js"></script> 
     <script src="http://code.highcharts.com/modules/exporting.js"></script> 

     <div id="container" 
      style="min-width: 400px; height: 400px; margin: 0 auto"></div> 


    </ui:define> 
</ui:composition> 
</html> 

,但我不能看到我的臉圖實現。 我的問題是什麼?有沒有更好的方法或通過JSF使用javascript/jQuery/highcharts的常用方法?

編輯:更正了我的代碼。 我確定,Javascript代碼已加載。

但是當我用螢火蟲檢查我的代碼時,我的'highchart'函數會生成兩次。 這是爲什麼發生?

+0

不能肯定它會幫助,但無論如何,變化''入'',同樣用''入'',確保你所有的JavaScript文件被真正加載並檢查瀏覽器控制檯...你也可以在''腳本中加入'language =「javascript」'... – Daniel

+0

並沒有改變erros – veote

+0

將你所有的代碼放在js文件中幷包含它...在瀏覽器控制檯中尋找錯誤, – Daniel

回答

1

將所有的代碼,包括它在你的XHTML不是採取在瀏覽器控制檯中查找錯誤,你也可以的JSLint的代碼.. 。

3

您沒有關閉匿名功能。在關閉</script>標籤之前添加});

請參見下面的代碼片段:在js文件

<ui:composition template="/mytemplate.xhtml"> 
<ui:define name="head"> 
    <script type="text/javascript" 
     src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script> 
    <script type="text/javascript"> 
     $(function() { 
      var chart; 
      $(document) 
        .ready(
          function() { 
           chart = new Highcharts.Chart(
<!-- CODE CONTINUES --> 

          } ] 
             }); // END new Highcharts.Chart() 
          }); // END $(document).ready() 

     }); // THIS WAS MISSING!! 
    </script> 
</ui:define> 
+0

未更改錯誤 – veote

0

添加下面一行到第一行你highcharts代碼...

jQuery.noConflict(); 

例如: -

$(function() { 
    var chart; 
    jQuery.noConflict(); //add this 
$(document).ready(function() { 
     chart = new Highcharts.Chart({ 
      chart: { 
       renderTo: 'container', 
       type: 'line', 
       marginRight: 130, 
       marginBottom: 25 
      }, ..........