0

我一直在尝试使用表格格式的脚本在我的 jsp 页面上打印 5 个数组列表,但我无法这样做。如果有人能建议我的代码有什么问题,我会非常高兴。在我的输出页面中,我只是看到打印的标题。不打印arraylist 中的数据。此外,我没有看到显示任何错误/异常信息。

1)view.jsp(我的jsp页面)

    <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@page import="com.AppUtils.*"%>
<%@page import="java.util.ArrayList"%>
<%Utils utils = new Utils(); %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>View Page</title>
</head>
<body>
    <form action="registerForm.jsp">
    <table border="1">
        <tr><td>Cuid</td>
        <td>First Name</td><td>Last Name</td>
        <td>Mobile</td><td>Desk</td></tr>

    <%for(int i=0; i<utils.getCount();i++){%>
        <tr>
            <td><%out.print(utils.getCuid().get(i));%></td>
            <td><%out.print(utils.getFname().get(i));%></td>
            <td><%out.print(utils.getLname().get(i));%></td>
            <td><%out.print(utils.getMobile().get(i));%></td>
            <td><%out.print(utils.getDesk().get(i));%></td>
        </tr>
    <%} %>

    </table>
    <input type="submit" value="Register"/>
    </form>

</body>
</html>

2)Utils.java(我的java类)

    package com.AppUtils;

import java.util.ArrayList;

public class Utils {

    public ArrayList getCuid() {
        return cuid;
    }
    public void setCuid(ArrayList cuid) {
        this.cuid = cuid;
    }
    public ArrayList getFname() {
        return fname;
    }
    public void setFname(ArrayList fname) {
        this.fname = fname;
    }
    public ArrayList getLname() {
        return lname;
    }
    public void setLname(ArrayList lname) {
        this.lname = lname;
    }
    public ArrayList getMobile() {
        return mobile;
    }
    public void setMobile(ArrayList mobile) {
        this.mobile = mobile;
    }
    public ArrayList getDesk() {
        return desk;
    }
    public void setDesk(ArrayList desk) {
        this.desk = desk;
    }
    ArrayList cuid = new ArrayList();
    ArrayList fname = new ArrayList();
    ArrayList lname = new ArrayList();
    ArrayList mobile = new ArrayList();
    ArrayList desk = new ArrayList();
    int count;
    public int getCount() {
        return count;
    }
    public void setCount(int count) {
        this.count = count;
    }


}

3)ViewServlet.java(我将值添加到所有 5 个数组列表的 servlet)

import java.io.*;
import com.AppUtils.*;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;


/**
 * Servlet implementation class ViewServlet
 */
public class ViewServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request,response);
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
        System.out.println("Logining in..");
        // retrieving values entered in form
        String uname = (String)request.getParameter("uname");
        String pwd = (String) request.getParameter("pwd");

        if (uname.equals("admin") && pwd.equals("admin")) {

            try {
                viewDetails();
                System.out.println("Redirecting to view page..");
                response.sendRedirect("view.jsp");
            } catch (Exception e) {
                e.printStackTrace(); 
            }
        } 
            }

    public void viewDetails() throws Exception{
        System.out.println("Reading Data..");
        BufferedReader input = new BufferedReader(new FileReader("H:/Workspace/teamRecordsApp/WebContent/records.txt"));
        String record;
        String[] split =new String[5];

        ArrayList cuid = new ArrayList();
        ArrayList fname = new ArrayList();
        ArrayList lname = new ArrayList();
        ArrayList mobile = new ArrayList();
        ArrayList desk = new ArrayList();
        int count = 0;
        while((record=input.readLine()) != null){
            split = record.split(",");
            System.out.println("Record is : "+split[0]+","+split[1]+","+split[2]+","+split[3]+","+split[4]);
            cuid.add(split[0]);
            fname.add(split[1]);
            lname.add(split[2]);
            mobile.add(split[3]);
            desk.add(split[4]);
            count = count+1;

        }
        input.close();
        System.out.println("Reading Done...");
        Utils utils = new Utils();
        utils.setCuid(cuid);
        utils.setFname(fname);
        utils.setLname(lname);
        utils.setMobile(mobile);
        utils.setDesk(desk);
        utils.setCount(count);
        System.out.println("Total records : "+count);


    }
}
4

2 回答 2

0

有两个问题

  1. 您没有转发到 JSP,而是使用response.sendRedirect("view.jsp"). 这将向 http 客户端(可能是浏览器)发送一个 302 响应,然后它将view.jsp. 因此,您在请求中设置的任何属性在新请求中都将不可用。
  2. 在你的jsp,你声明<%Utils utils = new Utils(); %>。然后,当您尝试使用 进行迭代时utils.getCount(),您指的是这个新创建的对象,而不是您在viewDetails()方法中本地声明的对象。因此,utils.getCount()返回0并且您的循环不执行任何操作。

看看HttpServletRequest#setAttribute(String, Object)你是要使用RequestDispatcher#forward()还是HttpSession#setAttribute(String, Object)要使用HttpServletResponse#sendRedirect(String).

于 2013-10-28T01:45:36.413 回答
0

这有很多问题。

您的 servlet 实际上并没有向您的 JSP 传递任何内容。您的viewDetails方法正在构造Utils对象的一个​​实例,但该实例只是在方法结束时消失。您需要以某种方式将其粘贴在请求范围内(request.setAttribute("utils", utils)

即使您这样做,response.sendRedirect您的 JSP 也会生成一个全新的请求,从浏览器往返,这将丢失任何请求范围的属性。您可能想要转发而不是重定向。

最后,您的 JSP 当前正在获得一个新的空实例Utils- 应该替换为request.getAttribute("utils")您从 servlet 设置的实例。

于 2013-10-28T01:46:35.283 回答