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

时间:2010-10-15 12:18:24

标签: jsp

我有一个使用'counter'(Integer)对象的jsp来跟踪显示的页面的各个部分。

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

所以它基本上是这样的:

JSP#1

<html>
    <body>
       <jsp:include page="include1.jsp" />
       <jsp:include page="include2.jsp" />
       <jsp:include page="include3.jsp" />
    </body>
</html>

我需要将çounter传递给第一个jsp:include,更新(仅限添加,如果重要)并将更新后的值传递给下一个jsp:include,然后将新更新的值挂入到下一个jsp:include。

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

我有这整个设置与需要交给jsp的所有其他必要数据一起运行良好:包括,但我不能为我的生活弄清楚如何使用/ same / object所有地方,以便它将由各种jsp更新:包括。

这甚至可能吗?

任何其他方式来实现我正在寻找的功能? (在所有jsp中使用一个计数器:包括)

非常感谢任何和所有帮助。

3 个答案:

答案 0 :(得分:0)

我认为您可以传递这样的参数:

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

另外,您必须将计数器定义为像我这样的jsp声明:

<%! int counter =0; %>

答案 1 :(得分: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" />

答案 2 :(得分:0)

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

看起来像这样:

我的main.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>

我的'include'jsps看起来像这样:

<%
   Integer counter = 
      Integer.valueOf(request.getParameter("counter"));
%>

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

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

你可以看到它是如何工作的。主页面将计数器对象的值作为参数传递给第一个includeX.jsp,后者将param拉出请求并使用它。然后在includeX.jsp的末尾,它在请求属性中设置计数器的当前值。当main.jsp再次拾取它时,它会从请求属性中提取值,再次作为参数传递给下一个includeX.jsp。

有一次,我确实已经实现/ all /使用request.get / setAttribute调用而不是东西,但它似乎表明流更好地将它作为参数传递而不是从请求对象中拉出来。我真的不知道这两种方法的优点/缺点,但现在这对我有用。

感谢所有人的帮助,尽管我的实施方式完全不同于建议。