看到你们都知道在jsp中包含文件..。我有两个文件
one.jsp two.jsp
在two.jsp中,我有以下给定的代码
Long something = 0;在one.jsp代码中是
<%@include file='two.jsp'%>
<%@include file='two.jsp'%>我两次都把同一份文件放进去了,
所以会出现错误,因为某个变量会被创建2次,对吗?
所以这意味着在第二次包含文件之前,我应该检查一下,如果它包含了,那么我就不应该再灌输它,如何检查它呢?
与php中的函数一样,包含(“file.php”);//等函数将包括文件
和include_once("file.php");//这将包括文件,如果它之前不包括,
有什么解决办法吗?
发布于 2011-10-16 08:53:38
实际上,使用这两个静态包含将导致将同一个变量声明两次的错误。在编译时,这些导入将在包含页中追加所包含页的代码,然后将全部编译。
我不知道任何内置在JSP中的include_once方法,但您可以通过在顶级页面中作为变量声明全局Set (即HashSet),或者作为请求属性(在处理结束时应该清除该属性)来执行类似的操作,其中可以添加已经包含的页面的名称。
one.jsp
<% HashSet<String> pagesSet = new HashSet<String>(); %>
...
<%@include file='two.jsp'/>two.jsp
<% if (!pagesSet.contains("two.jsp"){ %>
//... Remember to actually ADD two.jsp to pageSet,
// because it IS being included NOW.
pageSet.add("two.jsp");
// Entire contents of two.jsp
// ....
<% } %>注意,这与C中的#ifndef #define #endif模式非常相似。
考虑到使用dynamic,您将避免重复变量的问题。包含的页面将在它自己的作用域上执行,要访问服务器端变量,您必须将它们传递给<jsp:param>或Request、Session或Application作用域之一。关于静态和动态包含之间的差异,请参见这个问题的答案:包含指令和属性名称问题
此外,如果有大量的“条件”静态包含,则最终可能会命中64K方法极限。
https://stackoverflow.com/questions/7783145
复制相似问题