现在的位置: 首页 > web前端 > 正文

Jsp ajax 实现无刷新上传文件

2017年11月12日 web前端 ⁄ 共 15783字 ⁄ 字号 评论关闭

列表页:selectaddress.jsp

js页:ajax_edit.js

jsp处理页:editaddress.jsp

上传工具类:UploadUtil.java

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

列表页把form表单提交到一个隐式的iframe里面,设置表单的属性enctype='multipart/form-data'  target='hidden_frame'  

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

列表页执行回调函数!

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)

UploadUtil.java

(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)

抱歉!评论已关闭.