方法setAttribute()-将参数从servlet传递到Javascript文件
我创建了一个servlet,其中doPost()方法将名为facultyList的arraylist作为setAttribute()方法的参数发送到jsp页面。找出下面的代码:方法setAttribute()-将参数从servlet传递到Javascript文件,javascript,java,html,jsp,Javascript,Java,Html,Jsp,我创建了一个servlet,其中doPost()方法将名为facultyList的arraylist作为setAttribute()方法的参数发送到jsp页面。找出下面的代码: package com.wikamp.servlets; @WebServlet("/AdminLogin") public class AdminLogin extends HttpServlet { private AdminDAO adminDAO; private FacultyDAO facu
package com.wikamp.servlets;
@WebServlet("/AdminLogin")
public class AdminLogin extends HttpServlet {
private AdminDAO adminDAO;
private FacultyDAO facultyDAO;
private Admin admin;
private Faculty faculty;
private int adminNo;
private String passwordAcc;
public void init() {
facultyDAO = new FacultyDAO();
}
private void facultyList(HttpServletRequest request, HttpServletResponse response) throws SQLException, IOException, ServletException {
HttpSession httpSession = request.getSession();
ArrayList<Faculty> facultyList = facultyDAO.getFaculties();
httpSession.setAttribute("facultyList", facultyList);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request,response);
try {
adminDAO = new AdminDAO();
adminNo = Integer.valueOf(request.getParameter("adminNo"));
passwordAcc = request.getParameter("passAcc");
admin = adminDAO.getAdmin(adminNo,passwordAcc);
if (admin!=null && (admin.getADMIN_ID()>1 && admin.getPASSWORD_ACC()!=null)) {
HttpSession httpSession = request.getSession();
httpSession.setAttribute("adminNo",adminNo);
try {
facultyList(request,response);
}
catch (SQLException e) {
e.printStackTrace();
}
response.sendRedirect("AdminDashboard.jsp?adminNo="+adminNo);
}
else {
response.sendRedirect("None");
}
}
catch (NullPointerException | SQLException ex) {
System.out.println(ex.getMessage());
}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}
package com.wikamp.servlets;
@WebServlet(“/AdminLogin”)
公共类AdminLogin扩展了HttpServlet{
私人管理员;
私立法学院道法学院道;
私人行政;
私人教师;
私人int adminNo;
私有字符串密码;
公共void init(){
facultyDAO=新的facultyDAO();
}
私有void facultyList(HttpServletRequest请求、HttpServletResponse响应)抛出SQLException、IOException、ServletException{
HttpSession HttpSession=request.getSession();
ArrayList facultyList=facultyDAO.getFaculties();
setAttribute(“facultyList”,facultyList);
}
受保护的void doPost(HttpServletRequest请求、HttpServletResponse响应)引发ServletException、IOException{
doGet(请求、响应);
试一试{
adminDAO=新的adminDAO();
adminNo=Integer.valueOf(request.getParameter(“adminNo”);
passwordAcc=request.getParameter(“passAcc”);
admin=adminDAO.getAdmin(adminNo,passwordAcc);
if(admin!=null&(admin.getADMIN\u ID()>1&&admin.getPASSWORD\u ACC()!=null)){
HttpSession HttpSession=request.getSession();
setAttribute(“adminNo”,adminNo);
试一试{
学院列表(请求、响应);
}
捕获(SQLE异常){
e、 printStackTrace();
}
sendRedirect(“AdminDashboard.jsp?adminNo=“+adminNo”);
}
否则{
响应。发送重定向(“无”);
}
}
捕获(NullPointerException | SQLException ex){
System.out.println(例如getMessage());
}
}
受保护的void doGet(HttpServletRequest请求,HttpServletResponse响应)抛出ServletException,IOException{
}
}
在jsp文件中,我实现了一些jstl代码(foreach loop)来显示整个表,其中显示了大学各学院的名称和学生人数
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<table>
<thead>
<tr>
<th>Faculty</th>
<th>Number of Students</th>
</tr>
</thead>
<tbody>
<c:forEach var="fac" items="${facultyList}">
<tr>
<td>
<c:out value="${fac.facultyName}" />
</td>
<td>
<c:out value="${fac.studentsNo}" />
</td>
</tr>
</c:forEach>
</tbody>
</table>
<div id="piechart" style="width: 1200px; height: 500px;"></div>
</body>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
<script src="javascript/FacultyPieChart.js"></script>
</html>
标题
官能
学生人数
然后我使用谷歌图表在饼图上显示相同的数据。该图表由javascript文件生成,如下所示:
$(document).ready(function(){
google.charts.load('current', {'packages':['corechart']});
google.charts.setOnLoadCallback(drawChart);
var facultyStats = [];
console.log(facultyStats)
var table = document.getElementsByTagName("table")[0];
table.bgColor = "Yellow";
var td = table.getElementsByTagName("td");
for (var i = 0; i < td.length; i++) {
if (i % 2 == 0) {
facultyStats[i] = td[i].innerHTML.trim();
td[i].style.background = "LightBlue";
}
else {
facultyStats[i] = td[i];
td[i].style.background = "Orange";
}
}
function drawChart() {
var data = google.visualization.arrayToDataTable([
['Faculty', 'Number of students'],
[facultyStats[0].toString(), parseInt(facultyStats[1].innerHTML.trim(), 10)],
[facultyStats[2].toString(), parseInt(facultyStats[3].innerHTML.trim(), 10)],
[facultyStats[4].toString(), parseInt(facultyStats[5].innerHTML.trim(), 10)],
[facultyStats[6].toString(), parseInt(facultyStats[7].innerHTML.trim(), 10)],
[facultyStats[8].toString(), parseInt(facultyStats[9].innerHTML.trim(), 10)],
[facultyStats[10].toString(), parseInt(facultyStats[11].innerHTML.trim(), 10)],
[facultyStats[12].toString(), parseInt(facultyStats[13].innerHTML.trim(), 10)],
[facultyStats[14].toString(), parseInt(facultyStats[15].innerHTML.trim(), 10)],
]);
var options = {
title: 'Number of students per faculty (in %)'
};
var chart = new google.visualization.PieChart(document.getElementById('piechart'));
chart.draw(data, options);
}
});
$(文档).ready(函数(){
load('current',{'packages':['corechart']});
google.charts.setOnLoadCallback(drawChart);
var facultyStats=[];
控制台日志(facultyStats)
var table=document.getElementsByTagName(“表”)[0];
table.bgColor=“黄色”;
var td=table.getElementsByTagName(“td”);
对于(变量i=0;i
下面的屏幕截图显示了我的代码的最终结果,即根据以下JS代码从html表检索数据的pie char:
var table=document.getElementsByTagName(“表”)[0]var td=table.getElementsByTagName(“td”) 主要思想是将arraylist从servlet直接传递到javascript文件。我想摆脱对我来说毫无用处的html表,让javascript代码直接从arraylist检索数据
我试图将foreach循环放到JS文件中,但它不起作用,因为JS无法识别jstl代码。有人知道这个问题吗?有人知道这个问题吗?