我一直在尝试使用表格格式的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);
}
}
答案 0 :(得分:0)
有两个问题
response.sendRedirect("view.jsp")
发送重定向。这将向http客户端(可能是浏览器)发送302响应,然后向view.jsp
发送新 http请求。因此,您在请求中设置的任何属性都不会在新请求中可用。jsp
中,您声明<%Utils utils = new Utils(); %>
。当您尝试使用utils.getCount()
进行迭代时,您指的是这个新创建的对象,而不是您在viewDetails()
方法中本地声明的对象。因此,utils.getCount()
会返回0
并且您的循环不会执行任何操作。如果您打算使用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")
。