编写JavaScript的JSTL代码

时间:2011-12-08 06:56:34

标签: java javascript jsp charts jstl

我有一个独立的JavaScript,可以绘制图表。

 <script type="text/javascript"     src="/GraphicalPortlet-portlet/js/amcharts.js"></script>
 <script type="text/javascript" src="/GraphicalPortlet-portlet/js/raphael.js"></script>

 <script type="text/javascript">
var chart;
var chartData = [
             {country:"Tâches",a:25}, //this is the chart data
             {country:"UK",a:25},
             {country:"Fran\u00E7ais ",a:25 } ];

    window.onload = function() {
    chart = new AmCharts.AmSerialChart();
    chart.dataProvider = chartData;
    chart.categoryField = "country";

    var graph = new AmCharts.AmGraph();
    graph.labelText="[[value]]";
    graph.valueField = "a";
    graph.type = "column";

//some other components 
    var valAxis = new AmCharts.ValueAxis();
    valAxis.stackType = "regular";
    valAxis.gridAlpha = 0.1;
    valAxis.axisAlpha = 0;
    chart.addValueAxis(valAxis);

    var catAxis = chart.categoryAxis;
    catAxis.gridAlpha = 0.1;
    catAxis.axisAlpha = 0;
    catAxis.gridPosition = "start";

              //this is the actual plotting of graph
    chart.write("chartdiv");
}

我的问题

1)如何为这个JS编写JSTL代码,以便其他JSP可以包含我的JSTL,并为它们绘制图形。

2)如果客户端需要发送数据而不使用我的虚拟数据。我该怎么做才能改变我的JSTL?

整个想法是不同的JSP不应该复制我的JS代码。相反,只需要包含一个JSTL标签的衬里就可以获得这个JS代码。

1 个答案:

答案 0 :(得分:1)

你的问题令人困惑。看起来你正在将JSTL与其他东西混合在一起。请阅读our JSTL wiki page以了解实际的内容。

据我了解,功能要求是您需要向JavaScript提供服务器端变量。这可以通过多种方式完成。

  1. 让JSP将其打印为全局JS变量:

    <script>var data = ${someDataInJSONFormat};</script>
    

    预处理servlet准备了${someDataInJSONFormat}

    request.setAttribute("someDataInJSONFormat", someDataInJSONFormat);
    

    让你的JS在窗口加载时访问它:

    window.onload = function() {
        doSomethingWith(data);
    }
    
  2. 让JS通过Ajax检索它:

    var xhr = new XMLHttpRequest();
    xhr.onreadystatechange = function() {
        if (xhr.readyState == 4) {
            var data = eval('(' + xhr.responseText + ')');
            doSomethingWith(data);
        }
    }
    xhr.open('GET', 'someServletURL', true);
    xhr.send(null);
    

    其中someServletURL是返回数据的servlet的URL:

    response.setContentType("application/json");
    response.setCharacterEncoding("UTF-8");
    response.getWriter().write(someDataInJSONFormat);
    
  3. 您可以使用JSON库(例如Gson)将Java对象转换为JSON字符串。