方法setAttribute()-将参数从servlet传递到Javascript文件

方法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

我创建了一个servlet,其中doPost()方法将名为facultyList的arraylist作为setAttribute()方法的参数发送到jsp页面。找出下面的代码:

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

有人知道这个问题吗?有人知道这个问题吗?