jsp页面中包含“包含”页面的变量

问题描述 投票:52回答:4

使用标签添加到页面的jsp页面中变量的范围规则是什么?

我的理解是,包含的页面实际上是逐字复制到页面中的,这会使我假设,如果我在父JSP中声明了一个变量,则该子页面将在子JSP中可用。

但是,Eclipse对此有所抱怨(可以理解,因为我可以将页面包含在任何页面中或单独使用它们。当我尝试启动tomcat服务器时,它无法启动。

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

因此,我一直不希望他从每个子页面的会话中获取它们的想法,但是我想知道是否可以给他们所有相同的变量名,或者是否必须为它们选择不同的变量名。它们在每页中都不会发生冲突。

如果我在父jss中导入log4net,那么导入也要在子js中导入吗?

java jsp java-ee
4个回答
84
投票

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

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

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

如果使用前者,那么在父JSP上声明的任何变量都将在include.jsp的范围内(当然,您猜想的Eclipse不会看到此变量),因为它已被编译器有效复制。

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

同上用于进口。尽管可以安全地将它们多余地导入到包含页面中。

如果使用的是前者,我更喜欢在它们的后缀.jspf以表示JSP片段。然后,我可以关闭片段文件中的一些Eclipse警告。但总的来说,我尝试避免使用该方法,而倾向于第二种方法。

可以在文档中找到更多信息:Include directiveJSP include


7
投票

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

<% pageContext.include("/cities/" + (String) request.getAttribute("country_code") + ".jsp"); %>

4
投票

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


2
投票

创建变量时,应将范围设置为会话,否则,包含的页面将看不到它。示例:

<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>
© www.soinside.com 2019 - 2024. All rights reserved.