使用标签添加到页面的jsp页面中变量的范围规则是什么?
我的理解是,包含的页面实际上是逐字复制到页面中的,这会使我假设,如果我在父JSP中声明了一个变量,则该子页面将在子JSP中可用。
但是,Eclipse对此有所抱怨(可以理解,因为我可以将页面包含在任何页面中或单独使用它们。当我尝试启动tomcat服务器时,它无法启动。
我基本上想从父页面的会话中获取几个变量,并在子页面中使用它们。这不起作用。
因此,我一直不希望他从每个子页面的会话中获取它们的想法,但是我想知道是否可以给他们所有相同的变量名,或者是否必须为它们选择不同的变量名。它们在每页中都不会发生冲突。
如果我在父jss中导入log4net,那么导入也要在子js中导入吗?
在JSP中,有两种方法可以包含其他jsp页面。
<%@include file="include.jsp"%>
和
<jsp:include page="include.jsp" />
如果使用前者,那么在父JSP上声明的任何变量都将在include.jsp的范围内(当然,您猜想的Eclipse不会看到此变量),因为它已被编译器有效复制。
如果使用第二种方法,则包含在运行时完成,并且包含页面具有其自己的范围。
同上用于进口。尽管可以安全地将它们多余地导入到包含页面中。
如果使用的是前者,我更喜欢在它们的后缀.jspf以表示JSP片段。然后,我可以关闭片段文件中的一些Eclipse警告。但总的来说,我尝试避免使用该方法,而倾向于第二种方法。
可以在文档中找到更多信息:Include directive和JSP include。
如果要在要包含的页面路径中使用变量,请使用以下内容:
<% pageContext.include("/cities/" + (String) request.getAttribute("country_code") + ".jsp"); %>
从面向对象的角度,我建议不要依赖child.jsp中包含的parent.jsp变量的范围。这是因为当我在jsp中包含一个片段时,我倾向于在许多不同的地方重用该片段。例如,如果我有一个child.jsp,我可能想在parent1.jsp和parent2.jsp中使用它。在这种情况下,最好不要继承变量。
创建变量时,应将范围设置为会话,否则,包含的页面将看不到它。示例:
<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>