现有如图示页面:a.jsp中用<jsp:include>动作标签包含了两个页面:adminSidebar.jsp和adminRightbar.jsp,代码如下:
<divid="content">
<!-- 页面左边侧边栏 -->
<jsp:includepage="adminSidebar.jsp"></jsp:include>
<!-- 页面右边-->
<jsp:includepage="adminRightbar.jsp"></jsp:include>
</div>
其中adminRightbar.jsp页面中用iframe包含了一个页面b.jsp,代码如下:
<divclass="main-content-right">
<iframe name=rightFramestyle="WIDTH:100%; HEIGHT:800px" src="b.jsp"
frameborder=0>
</iframe>
</div>
现在要在显示a.jsp页面时把b.jsp中的数据显示出来,其中b.jsp中的数据需从数据库中读取。
有两种方法可以解决上述问题。
1、 使用session
在加载a.jsp页面时,直接去Servlet中读取b.jsp页面所需数据后不放到request中,而是放到session中,这样在a.jsp页面中b.jsp同样可以获取它的数据。最后重定向到a.jsp。
request.getRequestDispatcher("a.jsp").forward(request,response);
2、 加载b.jsp时读取数据
在加载a.jsp页面时,在adminRightbar.jsp中去Servlet中读取数据,如下代码:
<divclass="main-content-right">
<iframe name=rightFramestyle="WIDTH:100%; HEIGHT:800px" src="<%=path%>/Servlet?flag=browse"
frameborder=0>
</iframe>
</div>
在Servlet中读取b.jsp页面所需数据后放到request中,然后重定向到b.jsp,
request.getRequestDispatcher("b.jsp").forward(request,response);
最后重定向到a.jsp。
request.getRequestDispatcher("a.jsp").forward(request,response);
注意这两个重定向的不同,一个是a.jsp,另一个是b.jsp;
其他方法:如直接在b.jsp中用java小脚本也可以,但这样做页面会很乱,故不考虑。