jsp:include标记中的JSP / Servlet范围问题

时间:2013-06-30 05:34:22

标签: jsp java-ee servlets jspinclude

我只是感到困惑,当我在 indexq.jsp 中使用<jsp:include file="include/data.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 个答案:

答案 0 :(得分:1)

基本上<%@ include file="include/form.jsp" %>使用相同的上下文/请求,<jsp:include file="include/data.jsp" />使用separete请求。

因此,在您的情况下,它不起作用,因为您将值设置为请求的属性

以下是从链接中提取的一些详细信息:http://www.objectpartners.com/2011/04/14/jsp-to-include-or-jspinclude/

  

<jsp:include page=”"/>标记的结果与行为不同   将指定页面呈现的内容注入到包含的JSP中   标签的重点。这是通过基本上提交   请求页面到同一个容器,作为单独的呈现请求,   并取结果,而不是文件的内容。这个要求是   在它自己的上下文中完成,这意味着它不使用相同的页面   信息作为包含标记的页面。这个可以   方便,特别是如果包含的内容可能有冲突   变量

     

<%@include file=”" %>标记将注入已命名的内容   将文件放入包含标记的JSP中,就像复制并粘贴它一样。   这是在解析包含文件的内容之前完成的,   而是在解析包含JSP时解析它。这是最多的   类似于C #include指令,在预处理过程中   包含文件在编译文件之前“粘贴”到位。   在包含内容之后,对其进行评估,所有内容都相同   上下文,因此具有相同的访问和约束   如果内容只是简单输入就包含在内的代码。