代码之家  ›  专栏  ›  技术社区  ›  Omar Kooheji

带有“包含”页面的JSP页面中的变量

  •  51
  • Omar Kooheji  · 技术社区  · 15 年前

    JSP页面中的变量的作用域规则是什么,页面使用标记添加到变量中?

    我的理解是,所包含的页面基本上是以原样复制到页面中的,这将导致我假设,如果我在父JSP中声明了一个变量,那么它将在子JSP中可用。

    然而Eclipse抱怨这一点(可以理解,因为我可以将页面放在任何页面中,或者将它们单独使用。当我试图启动Tomcat服务器时,它无法启动。

    我基本上想从父页面的会话中获取一些变量,并在子页面中使用它们。这不管用。

    所以我想到了从每个子页面的会话中获取它们的想法,但是我想知道我是否可以给它们所有相同的变量名,或者我是否必须在每个页面中为它们选择不同的变量名,这样它们就不会发生冲突。

    另外,如果我在父JSS中导入log4net,那么导入呢?我还必须在子JS中导入它吗?

    4 回复  |  直到 15 年前
        1
  •  81
  •   Dan YOU    12 年前

    在JSP中,包含其他JSP页面有两种方法。

    <%@include file="include.jsp"%>
    

    <jsp:include page="include.jsp" />
    

    如果使用前者,那么在父JSP上声明的任何变量都将在include.jsp中的作用域内(当然,Eclipse不会像您想象的那样看到这一点),因为编译器会有效地将其复制进来。

    如果使用第二种方法,则在运行时完成包含,并且包含页面有其自己的范围。

    进口同上。尽管在include页面中冗余地导入它们是安全的。

    如果使用前者,我更喜欢在它们后面加上.jspf来表示JSP片段。我可以关闭碎片文件中的一些日食警告。但总的来说,我尽量避免使用这种方法,而更喜欢第二种方法。

    更多信息可在以下文档中找到: Include directive JSP include .

        2
  •  7
  •   Dagvadorj    14 年前

    如果要在要包含的页面路径中使用变量,请使用以下命令:

    <% pageContext.include("/cities/" + (String) request.getAttribute("country_code") + ".jsp"); %>
    
        3
  •  4
  •   mR_fr0g    15 年前

    从面向对象的角度来看,我建议不要依赖parent.jsp中包含在child.jsp中的变量的范围。这是因为当我在JSP中包含一个片段时,我倾向于在许多不同的地方重用该片段。例如,如果我有一个child.jsp,我可能希望在parent1.jsp和parent2.jsp中使用它。在这种情况下,最好不要进行变量继承。

        4
  •  2
  •   Marouane Gazanayi    13 年前

    创建变量时,应将作用域设置为session,否则所包含的页面将看不到它。 例子:

    <logic:iterate id="supportTmp" name="publicites" indexId="indexLots" scope="session">                                    
        <c:set var="support" value="${supportTmp}" scope="session"/>
        <c:choose>
        <c:when test="${publiciteMoniteur == true}">
        <jsp:include page="/jsp/bodies/suiviEnvoiPubliciteMoniteurLigne.jsp" />
        </c:when>
        <c:otherwise>
            <jsp:include page="/jsp/bodies/suiviEnvoiPubliciteDefautLigne.jsp" />
        </c:otherwise>
    </c:choose>
    </logic:iterate>