LetonLIU 2011-04-29
本章节继续讲解如何使用spring mvc和Iframe进行类似ajax的数据提交页面无刷新的效果!!
父页面的功能如下:增删改功能,关键代码如下
<script type="text/javascript"> //Action 操作对象 拥有 add query del 等方法 var Action = {}; //查询 Action.qry = function() { document.forms[0].target = "resultIframe"; document.forms[0].action="list.jsp"; document.forms[0].submit(); }; Action.del = function() { document.forms[0].target = "delPage"; document.forms[0].action="/del/delRecord.mvc"; document.forms[0].submit(); }; //删除操作完成后的提示 window.actionComplete = function() { alert("操作完成!");Action.qry (); };
</script>
<form action="list.jsp" name="QryForm" method="post" target="resultIframe"> <input name="Sreach" type="button" class="Sreach" onClick="Action.qry();" value="查找" /> <input type="button" class="btn_4" value="删除" onClick="Action.del()" /> </form> <iframe name="resultIframe" style="width:100px;height:100px"/><!-- 查询结果页面--> <iframe name="delPage" style="display:none;"/><!-- 删除结果页面-->
list.jsp 代码如下:
<html> <body>我是列表页面</body></html>
DelController 代码如下:
@Controller @JspPkg(value="/") public class DelController extends BaseActionController { @Resource(name = "jdbcTemplate") private JdbcTemplate jdbcTemplate; public ModelAndView delRecord(HttpServletRequest request, HttpServletResponse response) throws Exception { String sql = "DELETE FROM TEST WHERE a = 1 "; jdbcTemplate.update(sql ,new ArrayList()); return this.getResultPage();//--指向 resultPage.jsp页面 } }
resultPage.jsp
<html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>结果处理页面</title> <% String function = RequestUtil.getParameter(request,"function","actionComplete"); %> <script type="text/javascript"> // 添加 || 修改完成 window.initBody = function() { var result = new Object(); result.key = '${key}'; result.status = '${status}'; result.message = '${prompt}'; result.prompt = '${prompt}'; result.level = 0; result.display = true; window.exist = false; try{ window.parent.<%=function%>(result); }catch(E){ window.alert("函数未找到 : function2=[<%=function%>]"); } }; </script> </head> <body onload="initBody();"> 结果页面 </body> </html>
上面就是所有代码,很简单的逻辑,但里面的原理很有用。
上面代码执行的原理大体如下:
查询时,表单把数据提交到resultIframe这个iframe中,利用这个Iframe来展现列表信息;、
删除操作时,表单提交数据到delPage这个隐藏的Iframe中,删除的处理逻辑在DelController 中,最后DelController 将处理结果转向resultPage.jsp页面;这时delPage 中的内容便是resultPage.jsp中的内容;、
resultPage.jsp只做了一件事:页面加载完成后,执行父页面的actionComplete方法;这样父页面就在没有刷新的情况下完成了删除操作