前提概要:必须动态设置业务所需值,经测试---1.好像只能直接写入,不能用jsonString这种参数 2.uploadify的上传多文件时,每个文件都会请求一次Action。总之,不适合做多文件并且表单参数较多的结合提交。如果仅有一个文件上传和少量的表单参数则比较适合
===================================================================================
struts 上传框架
配置中 struts.xml
<action name="saveNewsMainTypeAction!*" class="saveNewsMainTypeAction" method="{1}">
<interceptor-ref name="fileUpload"/> // struts.xml 中有着个拦截器的配置 上传文件用 默认是不加载的
<interceptor-ref name="defaultStack"/>
<result name="input">/signin.jsp</result>
<result type="json">
<param name="includeProperties">result</param>
</result>
</action>
========================================================================================
<!-- 引入文件上传js -->
<link rel="stylesheet" type="text/css" href="<%=request.getContextPath() %>/uploadify/uploadify.css"/>
<script type="text/javascript" src="<%=request.getContextPath() %>/uploadify/swfobject.js"></script>
<script type="text/javascript" src="<%=request.getContextPath() %>/uploadify/jquery.uploadify.v2.1.0.js"></script>
<script>
// 增加validate验证框架处理
$(function(){
$("#form2").validate({
rules : {
typename : "required",
info : "required"
},
messages : {
typename : "<span style='color:red;font-size:12px'>新闻主类型不允许为空</span>",
info : "<span style='color:red;font-size:12px'>新闻分类不允许为空</span>"
},
submitHandler : function(form){
$.ajax({
type : "post",
url : "<%=request.getContextPath() %>/admin/saveNewsMainTypeAction!checkMainTypeExist.action",
data : "typename="+$("#typename").val(),
beforeSend : function(XMLHttpRequest){
$("#showLoad").html("正在处理数据,请稍候");
},
success : function(data,textStatus){
//alert(data.result);
if(data.result=="haveMainType"){
$("#typename").val("");
alert("新闻分类已经存在,不允许添加");
}else{
// 增加判断确认是否选择了文件
var num = $("#file").uploadifySettings('queueSize');
// 假如上传数量为1, 表示有选择了上传文件, 就采用uploadifyUpload上传文件同时上传普通数据
alert(num);
if(num == 1){
$('#file').uploadifySettings('scriptData',{'typename':$('#typename').val(),'info':$('#info').val()});
$('#file').uploadifyUpload();
}else{
// 否则只需要上传普通数据, 采用基本ajax方式
$.ajax({
type : "post",
url : "<%=request.getContextPath() %>/admin/saveNewsMainTypeAction!saveMainType.action",
data : "typename="+$('#typename').val()+"&info="+$('#info').val(),
beforeSend : function(XMLHttpRequest){
$("#showLoad").html("正在处理数据,请稍候");
},
success : function(data,textStatus){
//eval_r('var datas = '+data.result);
if(data.result=='saveSuccess'){
alert("文本数据添加成功");
}else{
alert("文本数据添加失败");
}
$("#form2").clearForm();
},
error : function(XMLHttpRequest, textStatus, errorThrown){
alert("服务器出错,请稍候再进行操作");
},
complete : function(XMLHttpRequest, textStatus){
$("#showLoad").html("");
}
});
}
}
},
error : function(XMLHttpRequest, textStatus, errorThrown){
alert("服务器出错,请稍候再进行处理");
},
complete : function(XMLHttpRequest, textStatus){
$("#showLoad").html("");
}
});
}
});
$("#file").uploadify({
'uploader' : '<%=request.getContextPath() %>/uploadify/uploadify.swf',
'script' : '<%=request.getContextPath() %>/admin/saveNewsMainTypeAction!saveMainType.action',
'cancelImg' : '<%=request.getContextPath() %>/uploadify/cancel.png',
'queueID' : 'fileQueue', //和存放队列的DIV的id一致
'fileDataName' : 'file', //和以下input的name属性一致
'auto' : false, //是否自动开始
'multi' : false, //是否支持多文件上传
'buttonText' : 'Browse', //按钮上的文字
'simUploadLimit' : 1, //一次同步上传的文件数目
'sizeLimit' : 20480, //设置单个文件大小限制
'queueSizeLimit' : 1, //队列中同时存在的文件个数限制
'fileDesc' : '支持格式:jpg/gif/jpeg/png/bmp.', //如果配置了以下的'fileExt'属性,那么这个属性是必须的
'fileExt' : '*.jpg;*.gif;*.jpeg;*.png;*.bmp',//允许的格式
onComplete: function (event, queueID, fileObj, response, data) {
$('#fileQueue').appendTo('.files').text(response);
//alert(response); //{'result':'xxxx'}
eval_r('var datas = '+response);
if(datas.result=='saveSuccess'){
alert("文件及数据添加成功");
}else{
alert("文件及数据添加失败");
}
$("#form2").clearForm();
},
onError: function(event, queueID, fileObj) {
alert("文件:" + fileObj.name + "上传失败");
},
onCancel: function(event, queueID, fileObj){
alert("取消了" + fileObj.name);
}
});
</script>
<html>
<input type="file" name="file" id="file" />
<div id="fileQueue" style=""></div> //文件队列
</html>