java-具有“包含”页面的jsp页面中的变量

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

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

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

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

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

如果我在父jss中导入log4net,那么导入又该如何在子js中导入呢?

Omar Kooheji asked 2020-01-14T16:17:58Z
4个解决方案
84 votes

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

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

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

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

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

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

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

可以在以下文档中找到更多信息:Include指令和JSP include。

Kris answered 2020-01-14T16:18:44Z
7 votes

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

<% pageContext.include("/cities/" + (String) request.getAttribute("country_code") + ".jsp"); %>
Dagvadorj answered 2020-01-14T16:19:04Z
4 votes

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

mR_fr0g answered 2020-01-14T16:19:24Z
2 votes

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

<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>
Marouane Gazanayi answered 2020-01-14T16:19:44Z
translate from https://stackoverflow.com:/questions/943770/variables-in-jsp-pages-with-included-pages