带有“包含”页面的jsp页面中的variables
什么是一个JSP页面的variables的范围规则,页面添加到他们使用标签?
我的理解是,包含的页面本质上是复制到页面的verbatum,这将导致我假设,如果我已经在Parent jsp中声明了一个variables,它将在子项目中可用。
然而,Eclipse抱怨这一点(可以理解,因为我可以将页面合理地包含在任何页面中,或者将它们作为独立使用,而当我尝试启动tomcat服务器时,它无法启动。
我基本上想要在父页面中获得几个variables,并在子页面中使用它们。 这不起作用。
所以我想到了让他们从每个子页面的会话,但是我想知道如果我可以给他们所有相同的variables名称,或者如果我不得不为他们select不同的variables名称每个页面,所以他们没有冲突。
还有,如果我导入log4net在父母的jss我也必须导入它的孩子呢?
在JSP中有两种包含其他jsp页面的方法。
<%@include file="include.jsp"%>
和
<jsp:include page="include.jsp" />
如果使用前者,那么任何在父JSP上声明的variables将在include.jsp的作用域中(当然,Eclipse将不会像你猜测的那样看到这个variables),因为它被编译器有效地复制了。
如果使用第二种方法,则包含在运行时完成,并且包含页面有其自己的作用域。
同上import。 尽pipe在包含页面中冗余地导入它们是安全的。
如果我使用前者,我倾向于使用.jspf后缀来表示JSP片段。 我可以closures碎片文件中的一些日食警告。 但总的来说,我尽量避免使用这种方法,而更喜欢第二种方法。
更多的信息可以在文档中find: Include指令和JSP包含 。
从面向对象的angular度来看,我build议不要依赖于包含在child.jsp中的parent.jsp中的variables范围。 这是因为当我在jsp中包含一个片段时,我倾向于在许多不同的地方重用这个片段。 例如,如果我有一个child.jsp我可能想在parent1.jsp以及parent2.jsp中使用它。 在这种情况下最好不要variablesinheritance。
如果您想要在要包含的页面的path中使用variables,请使用以下内容:
<% pageContext.include("/cities/" + (String) request.getAttribute("country_code") + ".jsp"); %>
当你创build一个variables时,你应该将范围设置为会话,否则,包含的页面将不会看到它。 例如:
<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>