我想知道是否可以使用谷歌圖表製作簡單動態的圖表;這裏我實際使用的是:使用谷歌圖表生成動態統計
Oracle DB,JSTL,EL,JSP頁面。
爲了實現上述結果,我還應該在我的知識範圍內做些什麼。
編輯:
我經歷JPQL來收集來自ORACLE DATABSE數據,他們將被存儲在包含名稱和各行的數量Object []對象的名單,他們將被送到通過servlet實現的JSP頁面:request.setAttribute("data",listemployees);
如何從JSP訪問此列表,以及如何將它們存儲在生成圖表的JavaScript代碼中。
編輯:添加細節
這是DAO的一部分,選擇門票的種類和對其計數。
private static final String JPQL_SELECT_TICKETS_ETAT = "SELECT t.etat, COUNT(t.id_ticket) FROM Ticket t GROUP BY t.etat";
@PersistenceContext(unitName = "bdd_helpdesk_PU")
private EntityManager em;
public List<Object[]> chargerTicketsParEtat() throws DAOException {
List<Object[]> liste;
//List<Object[]> results = em.createQuery("").getResultList();
TypedQuery<Object[]> query = em.createQuery(JPQL_SELECT_TICKETS_ETAT, Object[].class);
//query.setParameter(PARAM_TICKET, id_ticket);
try {
liste = (List<Object[]>) query.getResultList();
} catch (NoResultException e) {
return null;
} catch(Exception e) {
throw new DAOException(e);
}
return liste;
}
下一個代碼發生在servlet的:
List<Object[]> lticket = ticketDao.chargerTicketsParEtat();
String test= "this is a string";
request.setAttribute("test", test);
request.setAttribute("lticket",lticket);
這是JSP頁面:
結果在數表示在一個表是這樣的:
<table>
<tr>
<th>Etat ticket</th>
<th>Nombre</th>
</tr>
<c:forEach items="${lticket}" var="ticket">
<tr>
<td>${ticket[0]}</td>
<td>${ticket[1]}</td>
</tr>
</c:forEach>
</table>
這就是我要用的那種牡鹿:
<head>
<!--Load the AJAX API-->
<script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
<script type="text/javascript">
// Load the Visualization API and the corechart package.
google.charts.load('current', {'packages':['corechart']});
// Set a callback to run when the Google Visualization API is loaded.
google.charts.setOnLoadCallback(drawChart);
// Callback that creates and populates a data table,
// instantiates the pie chart, passes in the data and
// draws it.
function drawChart() {
// Create the data table.
var data = new google.visualization.DataTable();
data.addColumn('string', 'Topping');
data.addColumn('number', 'Slices');
data.addRows([
['Mushrooms', 3],
['Onions', 1],
['Olives', 1],
['Zucchini', 1],
['Pepperoni', 2]
]);
// Set chart options
var options = {'title':'How Much Pizza I Ate Last Night',
'width':400,
'height':300};
// Instantiate and draw our chart, passing in some options.
var chart = new google.visualization.PieChart(document.getElementById('chart_div'));
chart.draw(data, options);
}
</script>
它被放置在頭上,我想知道我應該使用什麼語言來能夠注入所代表的表到圖表的腳本中的數據,我所知道的是EL(表達langugae),而JS是由瀏覽器解釋 新的servlet不能被放置在腳本,因爲它在服務器部分解釋:`
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
response.setContentType("application/json");
response.setHeader("Cache-Control", "nocache");
response.setCharacterEncoding("utf-8");
List<Object[]> lticket = ticketDao.chargerTicketsParEtat();
PrintWriter out = response.getWriter();
JSONObject json = new JSONObject();
try{
json.put("status", 200);
json.put("msg", "OK");
JSONObject map = new JSONObject();
String nom="Non défini";
long valeur;
for (Object[] result : lticket) {
if((int)result[0]==1)
nom="En attente de prise en charge";
else if((int)result[0]==2)
nom="En attente de validation";
else if((int)result[0]==3)
nom="Cloturé";
else if((int)result[0]==4)
nom="En cours de traitement";
valeur = (long) result[1];
map.put(nom,valeur);
}
json.put("map", map);
}catch(JSONException e){
e.printStackTrace();
}
out.print(json.toString());
request.setAttribute("lticket", lticket);
this.getServletContext().getRequestDispatcher("/NewFile2.jsp").forward(request, response);
}
JSP PAGE:
`<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.0/jquery.min.js"></script>
<script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
<script type="text/javascript">
var jsonData = [];
$(document).ready(function(){
$.ajax({url: "/test", success: function(result){
jsonData = result.map;
}});
});
// Load the Visualization API and the corechart package.
google.charts.load('current', {'packages':['corechart']});
// Set a callback to run when the Google Visualization API is loaded.
google.charts.setOnLoadCallback(drawChart);
// Callback that creates and populates a data table,
// instantiates the pie chart, passes in the data and
// draws it.
function drawChart() {
// Create the data table.
var data = new google.visualization.DataTable();
data.addColumn('string', 'Topping');
data.addColumn('number', 'Slices');
for (var key in jsonData) {
data.addRow([key,jsonData[key]]);
}
// Set chart options
var options = {'title':'How Much Pizza I Ate Last Night',
'width':400,
'height':300};
// Instantiate and draw our chart, passing in some options.
var chart = new google.visualization.PieChart(document.getElementById('chart_div'));
chart.draw(data, options);
}
</script>
<div id="chart_div" style="height: 300px; width: 100%;"></div>
</body>
`
是的,你可以使圖表動態,你可以使用ajax調用來獲取動態數據,並適當地設置或更新它。 –
好吧,數據通過Http請求發送,並可通過表達式語言(EL)讀取,我如何在JS腳本中添加數據? – TheNorth
您需要定義一個url,它可以爲Google圖表的數據提供json響應,然後您可以輕鬆地通過頁面中的ajax調用並更新圖表。請添加您現有的代碼,以便我可以展示如何在您的案例中完成 –