java - 为 JavaScript 编写 JSTL 代码

标签 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 代码。

最佳答案

你的问题很困惑。看起来你正在将 JSTL 与其他东西混合在一起。请阅读our JSTL wiki page了解它实际上是什么。

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

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

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

    其中 ${someDataInJSONFormat} 是由预处理 servlet 准备的:

    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);
    

您可以使用 JSON 库,例如 Gson将 Java 对象转换为 JSON 字符串。

关于java - 为 JavaScript 编写 JSTL 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8427310/

相关文章:

java - Spring Boot项目和com.microsoft.sqlserver.jdbc.SQLServerException : The "variant" data type is not supported

javascript - 如何在 JavaScript 中等待函数的 promise

java - Servlet 无法调用

javascript - 更新提交按钮上的数据并保持在同一页面上

java - 如何在jSTL中编写涉及3个列表的foreach?

java - 限制缓冲区读取器以防止 DoS 攻击

java - 在java中进行xml转换和过滤

java - 将日期转换为特定格式

javascript - AngularJS - onclick 中的 {{$index}}

javascript - 日期选择器模式向下滚动页面