本文实例讲述了jsp+ajax实现无刷新上传文件的方法。分享给大家供大家参考,具体如下:
列表页:selectaddress.jsp
js页:ajax_edit.js
jsp处理页:editaddress.jsp
上传工具类:UploadUtil.java
思想:由于安全问题,javascript操纵不了文件, 导致ajax不能动态上传文件,所以选择了iframe,
列表页把form表单提交到一个隐式的iframe里面,设置表单的属性
列表页执行回调函数!
selectaddress.jsp
<%@ page language=\"java\" contentType=\"text/html; charset=UTF-8\" pageEncoding=\"UTF-8\"%> <%@ page import=\"com.wap3.navigater.service.*\" %> <%@ page import=\"com.wap3.navigater.dao.*\" %> <%@ page import=\"com.wap3.navigater.pojo.*\" %> <%@ page import=\"com.wap3.navigater.util.*\" %> <%@ page import=\"java.util.*\" %> <%@ page import=\"java.text.*\" %> <!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\"> <html> <head> <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"> <script type=\"text/javascript\" src=\"../js/jquery.js\"></script> <script type=\"text/javascript\" src=\"../js/ajax_edit.js\"></script> <script type=\"text/javascript\" src=\"../js/jquery.jclock.js\"></script> <script type=\"text/javascript\" src=\"../js/common.js\"></script> <script type=\"text/javascript\" src=\"../js/jquery.form.js\"></script> <script type=\"text/javascript\" src=\"../js/fileTypeJudge.js\"></script> <script type=\"text/javascript\" src=\"../js/jquery.datepick.js\"></script> <script type=\"text/javascript\" src=\"../js/jquery.datepick-zh-CN.js\"></script> <link media=all href=\"../css/common.css\" type=text/css rel=stylesheet> <title>Insert title here</title> <style type=\"text/css\"> @import \"inc/jquery.datepick.css\"; </style> <script type=\"text/javascript\"> var $imgthis; $(function(){ var oldValue; $(\".package_list .edit\").bind(\"dblclick\",function(){ oldValue = $(this).text(); $(this).ajax_edit(\"editaddress.jsp\",oldValue); }); $(\".package_list .edit_img\").bind(\"dblclick\",function(){ // oldValue = $(this).html(); $imgthis = $(this); $(this).parents(\"tr.package_list\").siblings(\".package_list\").find(\":input.cancel\").trigger(\"click\"); $(this).ajax_edit_img(\"editaddress.jsp\",oldValue); }); $(\".package_list .edit :input[type!=file]:visible\").live(\"blur\",function(){ $(this).ajax_handle(\"editaddress.jsp?action=edit\",oldValue); }); $(\"#editcategoryName\").live(\"change\",function(){ $(this).ajax_handle(\"editaddress.jsp?action=edit\",oldValue); }); $(\"#del\").click( function () { if($(\":checkbox.urlid:checked\").size()>0){ var result = confirm(\"不可恢复的操作:确定要吗?\"+ \'\\n\' +\"提示:如果删除大类会删除大类及下面的子类!!!\"); if (result) { var url = location.href; alert(url); return ; $(\".main_table\").wrap(\"<form id=\'selectAddressForm\' action=\'selectaddress.jsp?action=del\' method=\'post\'></form>\"); $(\"#selectAddressForm\").submit(); } }else{ alert(\"请选择要删除的项目!\"); return false; } }); }); function callback(msg) //处理JSP回调 过来的参数 { $imgthis.html(\"<img class=\'logo\' src=\'\"+msg+\"\' title=\'\"+msg+\"\' />\"); } </script> </head> <body> <% String action = ParameterUtil.getStringParameter(request,\"action\",\"\"); FriendurlDao friendurlDao = new IbatisFriendurlDao(); if(\"del\".equals(action)){ int[] urlids = ParameterUtil.getIntArrayParams(request,\"urlid\"); for(int urlid : urlids){ friendurlDao.deleteFriendurlByP(urlid); } } String navigaterPage = request.getRequestURL().toString(); if(request.getQueryString()!= null){ navigaterPage += \"?\"+request.getQueryString(); } int categoryId = ParameterUtil.getIntParameter(request,\"categoryId\",0); if(categoryId == 0){ response.sendRedirect(\"selectcategory.jsp\"); return; } int pageSize = ParameterUtil.getIntParameter(request,\"pageSize\",10); int pageNo = ParameterUtil.getIntParameter(request,\"pageNo\",1); String orderBy = ParameterUtil.getStringParameter(request,\"orderBy\",\"sequence\"); int ascOrDesc = ParameterUtil.getIntParameter(request,\"ascOrDesc\",0); CategoryDao categoryDao = new IbatisCategoryDao(); Category category = categoryDao.selectCategoryByP(categoryId); String categoryName = category.getCategoryName(); Friendurl friendurl = new Friendurl(); friendurl.setCategoryId(categoryId); friendurl.addOrderBy(orderBy,ascOrDesc); List<Friendurl> friendurlList = friendurlDao.selectFriendurlByE(friendurl); //分页 int totallpage = (int) Math.ceil(((double) friendurlList .size() * 1.0D)/ (double) pageSize); pageNo =pageNo <= 0 ? 1 : pageNo; pageNo =pageNo > totallpage ? totallpage : pageNo; DataPageUtil datePage = new DataPageUtil(friendurlList ,friendurlList .size(),pageSize, pageNo); boolean hasPrerPage = datePage.hasPrevPage(); boolean hasNextPage= datePage.hasNextPage(); int curpageNo = datePage.getPageNo(); int pageCount = datePage.getPageCount(); friendurlList = DataPageUtil.subList(friendurlList, pageSize, pageNo); if(friendurlList == null && friendurlList.size()<=0) { out.println(\"没有您需要的数据\"); }else{ %> <%@include file=\"inc/header.jsp\" %> <div id = \"mainbox\"> <div class = \"c1\"> <table class=\"main_table\" width=\"100%\" border=\"1\" cellspacing=\"0\" cellpadding=\"0\"> <tr> <th align=\"center\" height=\"20\" colspan=\"13\" align=\"center\" bgcolor=\"#006699\">条目列表</th> </tr> <tr> <td width=\"10%\" height=\"20\" align=\"center\" bgcolor=\"#009999\"> <input id=\"AllORNoall\" type=\"checkbox\"><label for=\"AllORNoall\">全选</label> <input type=\"button\" id=\"reserse\" value=\"反选\" /> </td> <td width=\"7%\" height=\"20\" align=\"center\" bgcolor=\"#009999\">站点名称</td> <td width=\"7%\" height=\"20\" align=\"center\" bgcolor=\"#009999\">站点别名</td> <td width=\"7%\" height=\"20\" align=\"center\" bgcolor=\"#009999\">归类</td> <td width=\"7%\" height=\"20\" align=\"center\" bgcolor=\"#009999\">公司地址</td> <td width=\"7%\" height=\"20\" align=\"center\" bgcolor=\"#009999\">文字链接</td> <td width=\"7%\" height=\"20\" align=\"center\" bgcolor=\"#009999\">图片链接</td> <td width=\"7%\" height=\"20\" align=\"center\" bgcolor=\"#009999\">描述</td> <td width=\"7%\" height=\"20\" align=\"center\" bgcolor=\"#009999\">有效开始时间</td> <td width=\"7%\" height=\"20\" align=\"center\" bgcolor=\"#009999\">有效结束时间</td> <td width=\"7%\" height=\"20\" align=\"center\" bgcolor=\"#009999\">电话</td> <td width=\"7%\" height=\"20\" align=\"center\" bgcolor=\"#009999\">位置排序</td> <td width=\"7%\" height=\"20\" align=\"center\" bgcolor=\"#009999\">推荐序号</td> </tr> <% for(Friendurl friendurlTemp:friendurlList) { int urlId = friendurlTemp.getUrlid(); String siteName = friendurlTemp.getSitename(); String alias = friendurlTemp.getAlias(); String address = friendurlTemp.getAddress(); String texturl = friendurlTemp.getTexturl(); String imageurl = friendurlTemp.getImageurl(); String description = friendurlTemp.getDescription(); Date validbegintime = friendurlTemp.getValidbegintime(); Date validendtime = friendurlTemp.getValidendtime(); String mobile = friendurlTemp.getMobile(); int sequence = friendurlTemp.getSequence(); int filter = friendurlTemp.getFilter(); %> <tr class=\"package_list\"> <td height=\"20\" align=\"center\" class=\"urlid_td\"><input type=\"checkbox\" name=\"urlid\" class=\"id_select urlid\" value=<%= urlId%> /></td> <td height=\"20\" align=\"center\" class=\"edit sitename\"><%=siteName %></td> <td height=\"20\" align=\"center\" class=\"edit alias\"><%=alias %></td> <td height=\"20\" align=\"center\" class=\"edit categoryName\"><%=categoryName%></td> <td height=\"20\" align=\"center\" class=\"edit address\"><%=address %></td> <td height=\"20\" align=\"center\" class=\"edit texturl\"><%=texturl%></td> <td height=\"20\" align=\"center\" class=\"edit_img imageurl\"><img src=\'<%=imageurl%>\' class=\'logo\' title=\'<%=imageurl%>\'/></td> <td height=\"20\" align=\"center\" class=\"edit description\"><%=description%></td> <td height=\"20\" align=\"center\" class=\"edit validbegintime\"><%=validbegintime == null || \"\".equals(validbegintime)? \"--:--\" : TimeUtil.date2Str(validbegintime)%></td> <td height=\"20\" align=\"center\" class=\"edit validendtime\"><%=validendtime == null || \"\".equals(validendtime)? \"--:--\" : TimeUtil.date2Str(validendtime)%></td> <td height=\"20\" align=\"center\" class=\"edit mobile\"><%=mobile%></td> <td height=\"20\" align=\"center\" class=\"edit sequence\"><%=sequence%></td> <td height=\"20\" align=\"center\" class=\"edit filter\"><%=filter%></td> </tr> <% } %> <tr> <td align=\"center\"><input type=\"button\" id=\"del\" value=\"删除\" /></td> <td align=\"center\" colspan = \"12\">提示:双击选框修改属性值</td> </tr> </table> </div> <%@ include file=\"inc/pagination.jsp\"%> </div> <% } %> <iframe name=\'hidden_frame\' id=\"hidden_frame\" style=\'display:none\'></iframe> </body> </html>
editaddress.jsp
<%@ page language=\"java\" contentType=\"text/html; charset=UTF-8\" pageEncoding=\"UTF-8\"%> <%@ page import=\"com.wap3.navigater.util.*\" %> <%@ page import=\"com.wap3.navigater.service.*\" %> <%@ page import=\"com.wap3.navigater.pojo.*\" %> <%@ page import=\"com.wap3.navigater.dao.*\" %> <%@ page import=\"java.util.*\" %> <%@ page import=\"java.text.*\" %> <% String target = ParameterUtil.getStringParameter(request,\"target\",\"\"); String action = ParameterUtil.getStringParameter(request,\"action\",\"\"); if(!\"\".equals(target) && target != null && \"edit\".equals(action)){ int categoryId = 0; CategoryDao categoryDao = null; int urlid=0,status=0,sequence=0,filter=0; String sitename=null,alias=null,texturl=null,imageurl=null,description=null,mobile=null; Date validbegintime=null,validendtime=null; if(\"imageurl\".equals(target)){ System.out.println(\"图片上传\"); UploadUtil.upload(request, response); String imageurlpath = (String) request.getAttribute(\"imageurlpath\"); urlid = Integer.parseInt((String)request.getAttribute(\"urlid\")); imageurl = (String)request.getAttribute(\"imageurlpath\"); }else{ if(\"categoryName\".equals(target)){ String categoryName = ParameterUtil.getStringParameter(request,\"categoryName\",\"\"); Category category = new Category(); category.setCategoryName(categoryName); categoryDao = new IbatisCategoryDao(); Category category2 = categoryDao.selectCategoryByE(category).get(0); categoryId = category2.getCategoryId(); }else{ categoryId = ParameterUtil.getIntParameter(request,\"categoryId\",0); } urlid = ParameterUtil.getIntParameter(request,\"urlid\",0); sitename = ParameterUtil.getStringParameter(request,\"sitename\",\"\"); alias = ParameterUtil.getStringParameter(request,\"alias\",\"\"); texturl = ParameterUtil.getStringParameter(request,\"texturl\",\"\"); imageurl = ParameterUtil.getStringParameter(request,\"imageurl\",\"\"); description = ParameterUtil.getStringParameter(request,\"description\",\"\"); status = ParameterUtil.getIntParameter(request,\"status\",0); sequence = ParameterUtil.getIntParameter(request,\"sequence\",0); filter = ParameterUtil.getIntParameter(request,\"filter\",0); mobile = ParameterUtil.getStringParameter(request,\"mobile\",\"\"); validbegintime = ParameterUtil.getDateParameter(request,\"validbegintime\"); validendtime = ParameterUtil.getDateParameter(request,\"validendtime\"); } Calendar beginDay=Calendar.getInstance(); Friendurl friendurl = new Friendurl(); friendurl.setUrlid(urlid); friendurl.setSitename(sitename); friendurl.setDescription(description); friendurl.setTexturl(texturl); friendurl.setImageurl(imageurl); friendurl.setAlias(alias); friendurl.setSequence(sequence); friendurl.setMobile(mobile); friendurl.setCategoryId(categoryId); friendurl.setStatus(status); friendurl.setValidbegintime(validbegintime); friendurl.setValidendtime(validendtime); friendurl.setFilter(filter); FriendurlDao friendurlDao = new IbatisFriendurlDao(); friendurlDao.updateFriendurlByP(friendurl); Friendurl friendurl2 = friendurlDao.selectFriendurlByE(friendurl).get(0); if(friendurl2 != null){ String methodName = \"get\" + target.substring(0,1).toUpperCase()+target.substring(1); if(target.endsWith(\"time\")){ SimpleDateFormat df = new SimpleDateFormat(\"yyyy-MM-dd\"); out.println(TimeUtil.date2Str(((Date)(friendurl2.getClass().getMethod(methodName,new Class[]{}).invoke(friendurl2,new Object[]{}))))); }else if(\"categoryName\".equals(target)){ out.println(categoryDao.selectCategoryByP(friendurl2.getCategoryId()).getCategoryName()); }else if(\"imageurl\".equals(target)){ // 无刷新关键的步骤,让iframe的父辈body执行callback这个函数 out.println(\"<script>parent.callback(\'\"+friendurl2.getClass().getMethod(methodName,new Class[]{}).invoke(friendurl2,new Object[]{})+\"\')</script>\"); }else{ out.println(friendurl2.getClass().getMethod(methodName,new Class[]{}).invoke(friendurl2,new Object[]{})); } }else{ out.println(\"更新失败\"); } } %>
ajax_edit.js
(function(){ $.fn.extend({ ajax_edit:function(str,oldValue){ return this.each(function(){ $this = $(this); var id; var nameId = $this.attr(\"class\").split(\" \")[1]; var idName = $this.parents(\"tr.package_list\").find(\"td:first-child :input[type=checkbox]\").attr(\"class\").split(\" \")[1]; id = $this.siblings(\".\"+idName+\"_td\").find(\"input\").val(); if(nameId == \"categoryName\" && str == \"editaddress.jsp\"){ $this.load(\"categorylist.jsp\",{\'oldValue\':oldValue,\'urlid\':id}); }else{ $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>\"); $this.find(\":input:last\").focus(); } }) }, ajax_edit_img:function(str,oldValue){ //处理图片上传AJAX 关键的一步form表格里的 target=\'hidden_frame\'提交到ID为hidden_frame的iframe里面 return this.each(function(){ var $this = $(this); var nameId = $this.attr(\"class\").split(\" \")[1]; var idName = $this.parents(\"tr.package_list\").find(\"td:first-child :input[type=checkbox]\").attr(\"class\").split(\" \")[1]; var id = $this.siblings(\".\"+idName+\"_td\").find(\"input\").val(); 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>\"); $this.html($imgForm); $this.find(\":input:last\").focus(); $imgForm.find(\":input[type=file]\").bind(\"change\",function(){ $(this).fileTypeJudge(\"photo\"); }) $imgForm.find(\":input.ok\").bind(\"click\",function(){ var $button = $(this); if($imgForm.find(\":input[type=file]\").val()==\'\'){ alert(\"请上传图片!\"); return false; } $button.attr(\"disabled\",true); $(\"#selectaddressForm_img\").submit(); }) $imgForm.find(\":input.cancel\").bind(\"click\",function(){ $(this).parents(\".edit_img\").html(oldValue); }); }) }, ajax_handle:function(str,oldValue){ return this.each(function(){ var $this = $(this); setTimeout(function(){ if(!$(\"div\").hasClass(\"datepick-control\") || !$(\"div .datepick-control\").is(\":visible\")){ if(oldValue != $this.val() && $this.val() !=\"\" ){ $.post( str,$(\"#selectaddressForm\").serialize(), function(data){ $this.parents(\".edit\").text(data.trim()).css(\"color\",\"red\"); } ) }else{ $this.parents(\".edit\").text(oldValue); } } },1000); }) } }) })(jQuery)
希望本文所述对大家ajax程序设计有所帮助。
本文地址:https://www.stayed.cn/item/10301
转载请注明出处。
本站部分内容来源于网络,如侵犯到您的权益,请 联系我