如何在主jsp页面和jsp:included文件中使用相同的对象实例?

如何在主jsp页面和jsp:included文件中使用相同的对象实例?,jsp,Jsp,我有一个jsp,它使用一个“计数器”(整数)对象来跟踪显示的页面的各个部分 页面有三个主要部分,每个部分使用单独的jsp实现,jsp:included 所以它基本上是这样的: <jsp:include page="include1.jsp" /> <jsp:param name="counter" value="<%=counter%>" /> </jsp:include> <% Integer counter =

我有一个jsp,它使用一个“计数器”(整数)对象来跟踪显示的页面的各个部分

页面有三个主要部分,每个部分使用单独的jsp实现,jsp:included

所以它基本上是这样的:

<jsp:include page="include1.jsp" />  
  <jsp:param name="counter" value="<%=counter%>" />  
</jsp:include> 
<%
   Integer counter = 
      Integer.valueOf(request.getParameter("counter"));
%>

   <!-- do my stuff, sometimes manipulating the 'counter' Integer object -->

<%
   request.setAttribute("counter", counter);
%>
JSP#1

我需要将çcounter传递到第一个jsp:include,updated(仅限添加,如果需要的话),并将更新后的值交给下一个jsp:include,然后将新更新的值交给下一个jsp:include

所以计数器从0开始。 include1.jsp将此变量更新为3。 include2.jsp以值3开始,并更新为5。 include3.jsp以值5开始,并更新为9

我的整个设置与需要提交给jsp:includes的所有其他必要数据配合得很好,但我一辈子都不知道如何在所有地方使用/same/对象,以便通过各种jsp:includes更新它

这可能吗

还有其他方法可以实现我想要的功能吗?(在所有jsp:includes中使用计数器)


我们将非常感谢您的任何帮助

我认为这是可能的,您可以传递如下参数:

<jsp:include page="include1.jsp" />  
  <jsp:param name="counter" value="<%=counter%>" />  
</jsp:include> 
<%
   Integer counter = 
      Integer.valueOf(request.getParameter("counter"));
%>

   <!-- do my stuff, sometimes manipulating the 'counter' Integer object -->

<%
   request.setAttribute("counter", counter);
%>

另外,您必须将计数器定义为jsp声明,我认为:

<%! int counter =0; %>

只需将其存储在请求范围中即可。JSTL的
c:set
在这方面很有帮助

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
...
<c:set var="counter" value="0" scope="request" />
<jsp:include page="include1.jsp" />
<jsp:include page="include2.jsp" />
<jsp:include page="include3.jsp" />

...
然后,在每个包含文件中,执行以下操作以增加它:

<c:set var="counter" value="${counter + 1}" scope="request" />

甚至是静态的

<c:set var="counter" value="3" scope="request" />

我通过在请求对象中传递我的值解决了这个问题

看起来是这样的:

<jsp:include page="include1.jsp" />  
  <jsp:param name="counter" value="<%=counter%>" />  
</jsp:include> 
<%
   Integer counter = 
      Integer.valueOf(request.getParameter("counter"));
%>

   <!-- do my stuff, sometimes manipulating the 'counter' Integer object -->

<%
   request.setAttribute("counter", counter);
%>
mymain.jsp说:

<% int counter = 0; 
   request.setAttribute("counter", counter);
%>

<jsp:include page="include1.jsp">
   <jsp:param name="counter" value="<%=request.getAttribute("counter")%> />
</jsp:include>

<jsp:include page="include2.jsp">
   <jsp:param name="counter" value="<%=request.getAttribute("counter")%> />
</jsp:include>

<jsp:include page="include3.jsp">
   <jsp:param name="counter" value="<%=request.getAttribute("counter")%> />
</jsp:include>


这看起来是一个非常简单的解决方案——我想我缺少了JSP的“静态”概念。我会试试,然后再报告。感谢您的回复。它不会使其成为静态的,但会使其成为一个实例变量,而不是局部变量。但是,实例变量在整个Web应用程序的所有请求之间共享。您不希望出现这种情况,当多个用户同时访问同一个JSP时,这只会导致意外的结果。这是一个jsp声明,它将生成一个实例变量。我还认为他提出的解决方案更合适,也更容易实施。我还读到一些资料表明,这可能不是一种“现代”方法。我已经研究了另一个解决方案。谢谢您的回复。我没有想到要向JSTL寻求解决方案。我要试试这个!