jsp+ajax实现无刷新上传文件的方法
作者:xpsharp 发布时间:2024-04-17 10:39:30
标签:jsp,ajax,无刷新,上传文件
本文实例讲述了jsp+ajax实现无刷新上传文件的方法。分享给大家供大家参考,具体如下:
列表页: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)
希望本文所述对大家ajax程序设计有所帮助。
0
投稿
猜你喜欢
- 页级的典型代表引擎为BDB。 表级的典型代表引擎为MyISAM,MEMORY以及很久以前的ISAM。 行级的典型代表引擎为INNODB。 -
- 我们肯定都很熟悉商品购物车这一功能,每当我们在某宝某东上购买商品的时候,看中了哪件商品,就会加入购物车中,最后结算。购物车这一功能,方便消费
- 很多人在使用AJAX调用别人站点内容的时候,JS会提示"没有权限"错误,这是XMLHTTP组件的限制-安全起见禁止访问非
- 制作一个查看器可以查看豆瓣前100名电影的信息,当然这个爬取信息比较简单。所以重点放在 QThread 多线程的应用上面。QThread 子
- 本文实例讲述了python处理xml文件的方法。分享给大家供大家参考,具体如下:前一段时间因为工作的需要,学习了一点用Python处理xml
- 在使用Django过程中需要开发一些API给其他系统使用,为了安全把Token等验证信息放在header头中。如何获取:使用request.
- 本文介绍了ORACLE客户端连服务器的注意事项:1. 通过SQL*NET协议,ORACLE客户端连服务器时一般需要配置sqlnet.ora和
- 如果看到特别感兴趣的抖音vlogger的视频,想全部dump下来,如何操作呢?下面介绍介绍如何使用python导出特定用户所有视频信息抓包分
- 前言本文介绍CentOS7使用yum安装golang一、go语言介绍Go语言 是Google公司 在2007开发一种静态强类型、编译型语言,
- BS架构的企业级应用中,当一个表格列数较多时,用户一个常见的需求就是把前面几个重要的列固定住,这样拖动滚动条时固定的列会方便用户查看数据,用
- 学习前言一起来看看Efficientdet的keras实现吧,顺便训练一下自己的数据。什么是Efficientdet目标检测算法最近,谷歌大
- 需求 现在有一个需求是将10w条数据插入到MSSQL数据库中,表结构如下,你会怎么做,你感觉插入10W条数据插入到MSSQL如下的
- MVC模式MVC, 全名Model View Controller, 是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Mo
- 今天看到everything搜索速度秒杀windows自带的文件管理器,所以特地模仿everything实现了文件搜索以及打开对应文件的功能
- 在Firefox推出3.5后,他增加了许多新的支持,今天抽空将他们整理一下。属性image-renderingtext-renderingi
- 语音识别是人工智能中的一个领域,它允许计算机理解人类语音并将其转换为文本。该技术用于 Alexa 和各种聊天机器人应用程序等设备。而我们最常
- 方法不是主流的。有一组数据,大概10万个左右,每一单位的值不会大于30000,要求按照由大到小的顺序不重复输出。参考无忧cosin的方法后(
- 1、IIS为一个死循的执行过程设定执行时间(缺省为90秒)超时事件:<%response.buffer=true%><BO
- 腐蚀在一些图像中,会有一些异常的部分,比如这样的毛刺:对于这样的情况,我们就可以应用复式操作了。需要注意的是,腐蚀操作只能处理二值图像,即像
- 本文讲述了关于HTML5的data-*自定义属性。分享给大家供大家参考,具体如下:一、关于html元素的特性1.html元素都存在一些标准的