Проблема с областью 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, в которой во время предварительной обработки включенный файл "вставляется" на место до его компиляции. После включения содержимого оно оценивается в одном и том же контексте и, следовательно, с теми же правами доступа и ограничениями, которые имел бы включенный код, если бы содержимое было просто напечатано на месте.

Другие вопросы по тегам