jsp+ajax实现无刷新上传文件的方法

十度 Ajax 2016年03月07日 收藏

本文实例讲述了jsp+ajax实现无刷新上传文件的方法。分享给大家供大家参考,具体如下:

列表页:selectaddress.jsp
js页:ajax_edit.js
jsp处理页:editaddress.jsp
上传工具类:UploadUtil.java

思想:由于安全问题,javascript操纵不了文件, 导致ajax不能动态上传文件,所以选择了iframe,

列表页把form表单提交到一个隐式的iframe里面,设置表单的属性

  1. enctype='multipart/form-data'  target='hidden_frame'

然后,处理页处理后返回
  1. out.println('<script>parent.callback(" 返回值 ")</script>');

列表页执行回调函数!

selectaddress.jsp

  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2. pageEncoding="UTF-8"%>
  3. <%@ page import="com.wap3.navigater.service.*" %>
  4. <%@ page import="com.wap3.navigater.dao.*" %>
  5. <%@ page import="com.wap3.navigater.pojo.*" %>
  6. <%@ page import="com.wap3.navigater.util.*" %>
  7. <%@ page import="java.util.*" %>
  8. <%@ page import="java.text.*" %>
  9. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  10. <html>
  11. <head>
  12. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  13. <script type="text/javascript" src="../js/jquery.js"></script>
  14. <script type="text/javascript" src="../js/ajax_edit.js"></script>
  15. <script type="text/javascript" src="../js/jquery.jclock.js"></script>
  16. <script type="text/javascript" src="../js/common.js"></script>
  17. <script type="text/javascript" src="../js/jquery.form.js"></script>
  18. <script type="text/javascript" src="../js/fileTypeJudge.js"></script>
  19. <script type="text/javascript" src="../js/jquery.datepick.js"></script>
  20. <script type="text/javascript" src="../js/jquery.datepick-zh-CN.js"></script>
  21. <link media=all href="../css/common.css" type=text/css rel=stylesheet>
  22. <title>Insert title here</title>
  23. <style type="text/css">
  24. @import "inc/jquery.datepick.css";
  25. </style>
  26. <script type="text/javascript">
  27. var $imgthis;
  28. $(function(){
  29. var oldValue;
  30. $(".package_list .edit").bind("dblclick",function(){
  31. oldValue = $(this).text();
  32. $(this).ajax_edit("editaddress.jsp",oldValue);
  33. });
  34. $(".package_list .edit_img").bind("dblclick",function(){ //
  35. oldValue = $(this).html();
  36. $imgthis = $(this);
  37. $(this).parents("tr.package_list").siblings(".package_list").find(":input.cancel").trigger("click");
  38. $(this).ajax_edit_img("editaddress.jsp",oldValue);
  39. });
  40. $(".package_list .edit :input[type!=file]:visible").live("blur",function(){
  41. $(this).ajax_handle("editaddress.jsp?action=edit",oldValue);
  42. });
  43. $("#editcategoryName").live("change",function(){
  44. $(this).ajax_handle("editaddress.jsp?action=edit",oldValue);
  45. });
  46. $("#del").click( function () {
  47. if($(":checkbox.urlid:checked").size()>0){
  48. var result = confirm("不可恢复的操作:确定要吗?"+ '\n' +"提示:如果删除大类会删除大类及下面的子类!!!");
  49. if (result) {
  50. var url = location.href;
  51. alert(url);
  52. return ;
  53. $(".main_table").wrap("<form id='selectAddressForm' action='selectaddress.jsp?action=del' method='post'></form>");
  54. $("#selectAddressForm").submit();
  55. }
  56. }else{
  57. alert("请选择要删除的项目!");
  58. return false;
  59. }
  60. });
  61. });
  62. function callback(msg) //处理JSP回调 过来的参数
  63. {
  64. $imgthis.html("<img class='logo' src='"+msg+"' title='"+msg+"' />");
  65. }
  66. </script>
  67. </head>
  68. <body>
  69. <%
  70. String action = ParameterUtil.getStringParameter(request,"action","");
  71. FriendurlDao friendurlDao = new IbatisFriendurlDao();
  72. if("del".equals(action)){
  73. int[] urlids = ParameterUtil.getIntArrayParams(request,"urlid");
  74. for(int urlid : urlids){
  75. friendurlDao.deleteFriendurlByP(urlid);
  76. }
  77. }
  78. String navigaterPage = request.getRequestURL().toString();
  79. if(request.getQueryString()!= null){
  80. navigaterPage += "?"+request.getQueryString();
  81. }
  82. int categoryId = ParameterUtil.getIntParameter(request,"categoryId",0);
  83. if(categoryId == 0){
  84. response.sendRedirect("selectcategory.jsp");
  85. return;
  86. }
  87. int pageSize = ParameterUtil.getIntParameter(request,"pageSize",10);
  88. int pageNo = ParameterUtil.getIntParameter(request,"pageNo",1);
  89. String orderBy = ParameterUtil.getStringParameter(request,"orderBy","sequence");
  90. int ascOrDesc = ParameterUtil.getIntParameter(request,"ascOrDesc",0);
  91. CategoryDao categoryDao = new IbatisCategoryDao();
  92. Category category = categoryDao.selectCategoryByP(categoryId);
  93. String categoryName = category.getCategoryName();
  94. Friendurl friendurl = new Friendurl();
  95. friendurl.setCategoryId(categoryId);
  96. friendurl.addOrderBy(orderBy,ascOrDesc);
  97. List<Friendurl> friendurlList = friendurlDao.selectFriendurlByE(friendurl);
  98. //分页
  99. int totallpage = (int) Math.ceil(((double) friendurlList .size() * 1.0D)/ (double) pageSize);
  100. pageNo =pageNo <= 0 ? 1 : pageNo;
  101. pageNo =pageNo > totallpage ? totallpage : pageNo;
  102. DataPageUtil datePage = new DataPageUtil(friendurlList ,friendurlList .size(),pageSize, pageNo);
  103. boolean hasPrerPage = datePage.hasPrevPage();
  104. boolean hasNextPage= datePage.hasNextPage();
  105. int curpageNo = datePage.getPageNo();
  106. int pageCount = datePage.getPageCount();
  107. friendurlList = DataPageUtil.subList(friendurlList, pageSize, pageNo);
  108. if(friendurlList == null && friendurlList.size()<=0) {
  109. out.println("没有您需要的数据");
  110. }else{
  111. %>
  112. <%@include file="inc/header.jsp" %>
  113. <div id = "mainbox">
  114. <div class = "c1">
  115. <table class="main_table" width="100%" border="1" cellspacing="0" cellpadding="0">
  116. <tr>
  117. <th align="center" height="20" colspan="13" align="center" bgcolor="#006699">条目列表</th>
  118. </tr>
  119. <tr>
  120. <td width="10%" height="20" align="center" bgcolor="#009999">
  121. <input id="AllORNoall" type="checkbox"><label for="AllORNoall">全选</label>
  122. <input type="button" id="reserse" value="反选" />
  123. </td>
  124. <td width="7%" height="20" align="center" bgcolor="#009999">站点名称</td>
  125. <td width="7%" height="20" align="center" bgcolor="#009999">站点别名</td>
  126. <td width="7%" height="20" align="center" bgcolor="#009999">归类</td>
  127. <td width="7%" height="20" align="center" bgcolor="#009999">公司地址</td>
  128. <td width="7%" height="20" align="center" bgcolor="#009999">文字链接</td>
  129. <td width="7%" height="20" align="center" bgcolor="#009999">图片链接</td>
  130. <td width="7%" height="20" align="center" bgcolor="#009999">描述</td>
  131. <td width="7%" height="20" align="center" bgcolor="#009999">有效开始时间</td>
  132. <td width="7%" height="20" align="center" bgcolor="#009999">有效结束时间</td>
  133. <td width="7%" height="20" align="center" bgcolor="#009999">电话</td>
  134. <td width="7%" height="20" align="center" bgcolor="#009999">位置排序</td>
  135. <td width="7%" height="20" align="center" bgcolor="#009999">推荐序号</td>
  136. </tr>
  137. <%
  138. for(Friendurl friendurlTemp:friendurlList) {
  139. int urlId = friendurlTemp.getUrlid();
  140. String siteName = friendurlTemp.getSitename();
  141. String alias = friendurlTemp.getAlias();
  142. String address = friendurlTemp.getAddress();
  143. String texturl = friendurlTemp.getTexturl();
  144. String imageurl = friendurlTemp.getImageurl();
  145. String description = friendurlTemp.getDescription();
  146. Date validbegintime = friendurlTemp.getValidbegintime();
  147. Date validendtime = friendurlTemp.getValidendtime();
  148. String mobile = friendurlTemp.getMobile();
  149. int sequence = friendurlTemp.getSequence();
  150. int filter = friendurlTemp.getFilter();
  151. %>
  152. <tr class="package_list">
  153. <td height="20" align="center" class="urlid_td"><input type="checkbox" name="urlid" class="id_select urlid" value=<%= urlId%> /></td>
  154. <td height="20" align="center" class="edit sitename"><%=siteName %></td>
  155. <td height="20" align="center" class="edit alias"><%=alias %></td>
  156. <td height="20" align="center" class="edit categoryName"><%=categoryName%></td>
  157. <td height="20" align="center" class="edit address"><%=address %></td>
  158. <td height="20" align="center" class="edit texturl"><%=texturl%></td>
  159. <td height="20" align="center" class="edit_img imageurl"><img src='<%=imageurl%>' class='logo' title='<%=imageurl%>'/></td>
  160. <td height="20" align="center" class="edit description"><%=description%></td>
  161. <td height="20" align="center" class="edit validbegintime"><%=validbegintime == null || "".equals(validbegintime)? "--:--" : TimeUtil.date2Str(validbegintime)%></td>
  162. <td height="20" align="center" class="edit validendtime"><%=validendtime == null || "".equals(validendtime)? "--:--" : TimeUtil.date2Str(validendtime)%></td>
  163. <td height="20" align="center" class="edit mobile"><%=mobile%></td>
  164. <td height="20" align="center" class="edit sequence"><%=sequence%></td>
  165. <td height="20" align="center" class="edit filter"><%=filter%></td>
  166. </tr>
  167. <%
  168. }
  169. %>
  170. <tr>
  171. <td align="center"><input type="button" id="del" value="删除" /></td>
  172. <td align="center" colspan = "12">提示:双击选框修改属性值</td>
  173. </tr>
  174. </table>
  175. </div>
  176. <%@ include file="inc/pagination.jsp"%>
  177. </div>
  178. <%
  179. }
  180. %>
  181. <iframe name='hidden_frame' id="hidden_frame" style='display:none'></iframe>
  182. </body>
  183. </html>
  184.  

editaddress.jsp

  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2. pageEncoding="UTF-8"%>
  3. <%@ page import="com.wap3.navigater.util.*" %>
  4. <%@ page import="com.wap3.navigater.service.*" %>
  5. <%@ page import="com.wap3.navigater.pojo.*" %>
  6. <%@ page import="com.wap3.navigater.dao.*" %>
  7. <%@ page import="java.util.*" %>
  8. <%@ page import="java.text.*" %>
  9. <%
  10. String target = ParameterUtil.getStringParameter(request,"target","");
  11. String action = ParameterUtil.getStringParameter(request,"action","");
  12. if(!"".equals(target) && target != null && "edit".equals(action)){
  13. int categoryId = 0;
  14. CategoryDao categoryDao = null;
  15. int urlid=0,status=0,sequence=0,filter=0;
  16. String sitename=null,alias=null,texturl=null,imageurl=null,description=null,mobile=null;
  17. Date validbegintime=null,validendtime=null;
  18. if("imageurl".equals(target)){
  19. System.out.println("图片上传");
  20. UploadUtil.upload(request, response);
  21. String imageurlpath = (String) request.getAttribute("imageurlpath");
  22. urlid = Integer.parseInt((String)request.getAttribute("urlid"));
  23. imageurl = (String)request.getAttribute("imageurlpath");
  24. }else{
  25. if("categoryName".equals(target)){
  26. String categoryName = ParameterUtil.getStringParameter(request,"categoryName","");
  27. Category category = new Category();
  28. category.setCategoryName(categoryName);
  29. categoryDao = new IbatisCategoryDao();
  30. Category category2 = categoryDao.selectCategoryByE(category).get(0);
  31. categoryId = category2.getCategoryId();
  32. }else{
  33. categoryId = ParameterUtil.getIntParameter(request,"categoryId",0);
  34. }
  35. urlid = ParameterUtil.getIntParameter(request,"urlid",0);
  36. sitename = ParameterUtil.getStringParameter(request,"sitename","");
  37. alias = ParameterUtil.getStringParameter(request,"alias","");
  38. texturl = ParameterUtil.getStringParameter(request,"texturl","");
  39. imageurl = ParameterUtil.getStringParameter(request,"imageurl","");
  40. description = ParameterUtil.getStringParameter(request,"description","");
  41. status = ParameterUtil.getIntParameter(request,"status",0);
  42. sequence = ParameterUtil.getIntParameter(request,"sequence",0);
  43. filter = ParameterUtil.getIntParameter(request,"filter",0);
  44. mobile = ParameterUtil.getStringParameter(request,"mobile","");
  45. validbegintime = ParameterUtil.getDateParameter(request,"validbegintime");
  46. validendtime = ParameterUtil.getDateParameter(request,"validendtime");
  47. }
  48. Calendar beginDay=Calendar.getInstance();
  49. Friendurl friendurl = new Friendurl();
  50. friendurl.setUrlid(urlid);
  51. friendurl.setSitename(sitename);
  52. friendurl.setDescription(description);
  53. friendurl.setTexturl(texturl);
  54. friendurl.setImageurl(imageurl);
  55. friendurl.setAlias(alias);
  56. friendurl.setSequence(sequence);
  57. friendurl.setMobile(mobile);
  58. friendurl.setCategoryId(categoryId);
  59. friendurl.setStatus(status);
  60. friendurl.setValidbegintime(validbegintime);
  61. friendurl.setValidendtime(validendtime);
  62. friendurl.setFilter(filter);
  63. FriendurlDao friendurlDao = new IbatisFriendurlDao();
  64. friendurlDao.updateFriendurlByP(friendurl);
  65. Friendurl friendurl2 = friendurlDao.selectFriendurlByE(friendurl).get(0);
  66. if(friendurl2 != null){
  67. String methodName = "get" + target.substring(0,1).toUpperCase()+target.substring(1);
  68. if(target.endsWith("time")){
  69. SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
  70. out.println(TimeUtil.date2Str(((Date)(friendurl2.getClass().getMethod(methodName,new Class[]{}).invoke(friendurl2,new Object[]{})))));
  71. }else if("categoryName".equals(target)){
  72. out.println(categoryDao.selectCategoryByP(friendurl2.getCategoryId()).getCategoryName());
  73. }else if("imageurl".equals(target)){
  74. // 无刷新关键的步骤,让iframe的父辈body执行callback这个函数
  75. out.println("<script>parent.callback('"+friendurl2.getClass().getMethod(methodName,new Class[]{}).invoke(friendurl2,new Object[]{})+"')</script>");
  76. }else{
  77. out.println(friendurl2.getClass().getMethod(methodName,new Class[]{}).invoke(friendurl2,new Object[]{}));
  78. }
  79. }else{
  80. out.println("更新失败");
  81. }
  82. }
  83. %>
  84.  

ajax_edit.js

  1. (function(){
  2. $.fn.extend({
  3. ajax_edit:function(str,oldValue){
  4. return this.each(function(){
  5. $this = $(this);
  6. var id;
  7. var nameId = $this.attr("class").split(" ")[1];
  8. var idName = $this.parents("tr.package_list").find("td:first-child :input[type=checkbox]").attr("class").split(" ")[1];
  9. id = $this.siblings("."+idName+"_td").find("input").val();
  10. if(nameId == "categoryName" && str == "editaddress.jsp"){
  11. $this.load("categorylist.jsp",{'oldValue':oldValue,'urlid':id});
  12. }else{
  13. $this.html("<form id='selectaddressForm'><input type='hidden' name='"+idName+"' value='"+id+"' /><input type='hidden' name='target' value='"+nameId+"' /><input type='text' name='"+nameId+"' value='"+oldValue+"'/></form>");
  14. $this.find(":input:last").focus();
  15. }
  16. })
  17. },
  18. ajax_edit_img:function(str,oldValue){ //处理图片上传AJAX 关键的一步form表格里的 target='hidden_frame'提交到ID为hidden_frame的iframe里面
  19. return this.each(function(){
  20. var $this = $(this);
  21. var nameId = $this.attr("class").split(" ")[1];
  22. var idName = $this.parents("tr.package_list").find("td:first-child :input[type=checkbox]").attr("class").split(" ")[1];
  23. var id = $this.siblings("."+idName+"_td").find("input").val();
  24. var $imgForm = $("<form id='selectaddressForm_img' action='editaddress.jsp?action=edit&target=imageurl' method='post' enctype='multipart/form-data' target='hidden_frame'><input type='hidden' name='"+idName+"' value='"+id+"' /><input type='file' name='"+nameId+"' /><input type='button' class='cancel' value='取消' /><input type='button' class='ok' value='上传' /></form>");
  25. $this.html($imgForm);
  26. $this.find(":input:last").focus();
  27. $imgForm.find(":input[type=file]").bind("change",function(){
  28. $(this).fileTypeJudge("photo");
  29. })
  30. $imgForm.find(":input.ok").bind("click",function(){
  31. var $button = $(this);
  32. if($imgForm.find(":input[type=file]").val()==''){
  33. alert("请上传图片!");
  34. return false;
  35. }
  36. $button.attr("disabled",true);
  37. $("#selectaddressForm_img").submit();
  38. })
  39. $imgForm.find(":input.cancel").bind("click",function(){
  40. $(this).parents(".edit_img").html(oldValue);
  41. });
  42. })
  43. },
  44. ajax_handle:function(str,oldValue){
  45. return this.each(function(){
  46. var $this = $(this);
  47. setTimeout(function(){
  48. if(!$("div").hasClass("datepick-control") || !$("div .datepick-control").is(":visible")){
  49. if(oldValue != $this.val() && $this.val() !="" ){
  50. $.post(
  51. str,$("#selectaddressForm").serialize(),
  52. function(data){
  53. $this.parents(".edit").text(data.trim()).css("color","red");
  54. }
  55. )
  56. }else{
  57. $this.parents(".edit").text(oldValue);
  58. }
  59. }
  60. },1000);
  61. })
  62. }
  63. })
  64. })(jQuery)
  65.  

希望本文所述对大家ajax程序设计有所帮助。