Tôi đã nhìn thấy các câu hỏi khác tương tự như câu hỏi này nhưng không ai trong số chúng đã giúp tôi giải quyết vấn đề của mình. Về cơ bản, tôi đang cố gắng chuyển một biến từ một servlet đến một JSP.Chuyển biến từ servlet sang JSP
Mã servlet.
package com.servlets;
import java.io.IOException;
import java.util.ArrayList;
import javax.servlet.annotation.WebServlet;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.dao.DataGetter;
@WebServlet("/DataGetterServlet")
public class DataGetterServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
ArrayList<String[]> data;
private DataGetter dg;
public void init() throws ServletException {
try {
dg = new DataGetter();
data = dg.getData();
} catch (Exception e) {
throw new ServletException("An exception occurred in DataGetterServlet: "
+ e.getClass().getName());
}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setAttribute("data", data);
RequestDispatcher rd = request.getRequestDispatcher("index.jsp");
rd.forward(request, response);
}
}
My JSP đang
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Data extractor</title>
</head>
<body>
Data table:
<table boder="1">
<c:forEach var="item" items="${data}" >
<tr>
<c:forEach var="column" items="${item}">
<td>${column}</td>
</c:forEach>
</tr>
</c:forEach>
</table>
</body>
</html>
Tôi đã làm một số xét nghiệm với thẻ foreach và JSTL được thiết lập đúng cách. Tôi nghĩ rằng biến "dữ liệu" không đạt được JSP. Bất kỳ ý tưởng tại sao?
Xin cảm ơn trước.
CHỈNH SỬA: Để biết rõ các porpuses. Tôi đã cố gắng
<c:forEach var="i" begin="1" end="5">
Item <c:out value="${i}"/><p>
</c:forEach>
Và đó hoạt động, nhưng
<c:forEach var="item" items="${data}">
It worked!<p>
</c:forEach>
không hoạt động. Đây là những gì đã khiến tôi tin rằng dữ liệu biến đó không đạt được JSP vì một lý do nào đó.
EDIT 2: Để chạy nó, tôi đã định cấu hình máy chủ Tomcat trên Eclipse. Tôi nhấp chuột phải vào servlet và chọn Run As -> Run on Server. Máy chủ khởi động lại và tôi khởi chạy http://localhost:8080/DataExtractor/
từ trình duyệt của mình. Dưới đây là html kết quả:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Data extractor</title>
</head>
<body>
Data table:
<table border="1">
</table>
</body>
</html>
EDIT 3: Điều này có thể là chìa khóa của lý do tại sao điều này xảy ra. Khi tôi truy cập http://localhost:8080/DataExtractor/
(index.jsp), tôi nhận được html được đăng trong Chỉnh sửa 2, nhưng nếu tôi truy cập http://localhost:8080/DataExtractor/DataGetterServlet
thì tôi sẽ nhận được đúng trang! Bất kỳ ý tưởng tại sao?
Bạn có chắc chắn rằng biến mảng "dữ liệu" trong servlet thực sự có giá trị khi bạn thêm nó vào yêu cầu không? –
Có, tôi đã kiểm tra và tôi có thể nói chắc chắn rằng ArrayList được điền đúng. – fpele
Bạn có chắc chắn arrayList của bạn không phải là danh sách trống? Nếu nó trống, thì vòng lặp sẽ không lặp lại –