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

Posted

技术标签:

【中文标题】带有“包含”页面的 jsp 页面中的变量【英文标题】:Variables in jsp pages with "included" pages 【发布时间】:2010-10-30 22:27:15 【问题描述】:

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

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

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

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

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

如果我在父 jss 中导入 log4net,我还需要在子 jss 中导入它吗?

【问题讨论】:

如果变量在会话中,问题出在哪里?顺便说一句,父页面的会话是什么意思? 变量是整数变量,因为我必须从会话中获取它们,然后将它们转换为 Integer,然后每次使用它们时获取它们的 int 值。还检查无效性我试图通过声明一个局部变量来避免自己的痛苦。 【参考方案1】:

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

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

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

如果您使用前者,那么在父 JSP 上声明的任何变量都将在 include.jsp 的范围内(当然 Eclipse 不会像您推测的那样看到这一点),因为它被编译器有效地复制了进去。

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

同样适用于进口。尽管在包含页面中冗余导入它们是安全的。

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

可以在此处的文档中找到更多信息:Include directive 和 JSP include。

【讨论】:

我被这个例子弄糊涂了。也许 Jasmper 代码存在挑战?使用 形式;当我尝试写入“包含”.JSP 中的字符串时,出现运行时 JSP 编译器错误。我可以接受,也许我不允许“向后”传递值——为什么会出现错误,基于@include 的规定规则? 注意。没有空格,如答案所示将正常工作。【参考方案2】:

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

【讨论】:

你会怎么做?【参考方案3】:

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

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

【讨论】:

【参考方案4】:

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

<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>

【讨论】:

您确定,您不是指 REQUEST 范围吗?如果这样做,jsp:included 页面将看到您的变量。会话范围将创建一个值,该值会无缘无故地留在会话中。

以上是关于带有“包含”页面的 jsp 页面中的变量的主要内容,如果未能解决你的问题,请参考以下文章

javaweb笔记六

遍历 JSP 中的列表对象

带有十进制值的 JSP 页面中的 Numberformatexception

是否可以通过 Ajax 更改页面源内容变量

使用 Gradle 为带有 JSP 页面的 Spring Boot 应用程序创建 Jar

解析jsp页面中的变量