以表格格式在jsp页面上打印多个arraylist

时间:2013-10-28 01:35:34

标签: java jsp arraylist

我一直在尝试使用表格格式的scriplet在我的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个arraylists的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);


    }
}

2 个答案:

答案 0 :(得分:0)

有两个问题

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

答案 1 :(得分:0)

多重错误。

您的servlet实际上没有向JSP传递任何内容。您的viewDetails方法正在构建Utils对象的实例,但该实例在方法结束时消失。不知何故,您需要将其粘贴在请求范围(request.setAttribute("utils", utils)

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

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