Проблема с областью JSP/Servlet в теге jsp:include
Я просто озадачен, когда я использую <jsp:include file="include/data.jsp" />
в indexq.jsp мои данные не отображаются, но когда я использую <%@ include file="include/data.jsp" %>
это работает как ожидалось. Я не уверен, является ли проблема областью или языком выражения. Я также включил код ниже:
TaxiController.java
public class TaxiController extends HttpServlet {
// codes...
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// codes...
req.setAttribute("taxi_list", taxiDao.getAll());
req.getRequestDispatcher("/indexq.jsp").forward(req, resp);
}
}
indexq.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
<!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">
<script src="js/jquery-1.10.1.min.js" ></script>
<title>Taxi List</title>
</head>
<body>
<%@ include file="include/form.jsp" %>
<br />
<jsp:include page="include/data.jsp" />
<%-- <%@ include file="include/data.jsp" %> --%>
</body>
</html>
включить /data.jsp
<table>
<thead>
<tr><th colspan="5">Data</th></tr>
<tr>
<th>Date</th>
<th>Taxi Name</th>
<th>Plate number</th>
<th>Amount</th>
</tr>
</thead>
<tbody>
<c:forEach var="taxi" items="${taxi_list }" >
<tr>
<td>${taxi.date } </td>
<td>${taxi.taxiName }</td>
<td>${taxi.plateNum }</td>
<td>${taxi.amount }</td>
</tr>
</c:forEach>
</tbody>
</table>
Спасибо!
1 ответ
В основном <%@ include file="include/form.jsp" %>
использовать тот же контекст / запрос и для <jsp:include file="include/data.jsp" />
он использует отдельный запрос.
Так что в вашем случае это не сработало, потому что вы устанавливаете значение в качестве атрибута запроса
Ниже приведена подробная информация об этом, извлеченная по ссылке: http://www.objectpartners.com/2011/04/14/jsp-to-include-or-jspinclude/
<jsp:include page=”"/>
тэг ведет себя по-разному в том смысле, что результат рендеринга указанной страницы вводится в содержащий JSP в точке тэга. Это делается путем отправки запрашиваемой страницы в тот же контейнер в виде отдельного запроса рендеринга и получения результатов, а не содержимого файла. Этот запрос выполняется в своем собственном контексте, то есть он не использует ту же информацию о странице, что и страница, содержащая тег. Это может быть удобно, особенно если включенный контент может иметь конфликтующие переменные
<%@include file=”" %>
тег вставит содержимое именованного файла в JSP, содержащую тег, как если бы он был скопирован и вставлен. Это делается до того, как анализируется содержимое включенного файла, вместо этого выполняется его анализ во время синтаксического анализа содержащей JSP. Это больше похоже на директиву C #include, в которой во время предварительной обработки включенный файл "вставляется" на место до его компиляции. После включения содержимого оно оценивается в одном и том же контексте и, следовательно, с теми же правами доступа и ограничениями, которые имел бы включенный код, если бы содержимое было просто напечатано на месте.