我有一个独立的 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 提供服务器端变量。这可以通过多种方式完成。
让 JSP 将其打印为全局 JS 变量:
<script>var data = ${someDataInJSONFormat};</script>
其中
${someDataInJSONFormat}
是由预处理 servlet 准备的:request.setAttribute("someDataInJSONFormat", someDataInJSONFormat);
并让你的 JS 在窗口加载时访问它:
window.onload = function() { doSomethingWith(data); }
让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/