ExtJS同一个form中提交combobox和文件类型的问题

var uploadForm = new Ext.form.FormPanel({  
        layout: "form", 
        id:"upfilesyswin",
        labelWidth: 300,  
        baseCls: "x-plain",  
        //锚点布局-  
        buttonAlign: "center", 
        fieldDefaults: { //统一设置表单字段默认属性  
             labelWidth: 80, //标签宽度  
            width: 300, //字段宽度  
            allowBlank: false,//是否允许为空  
            labelAlign: 'left'//标签对齐方式  
        
        },
        items:  
            [  
             {  
                 fieldLabel: "文件",  
                 xtype: 'filefield',  
                 width: 300,  
                 id: "excelfile",  
                 name: "excelfile",
                 buttonText: '选择文件'
             },
             {
     	        fieldLabel: '选择表单',
     	        id:'tableName',
     	        xtype:"combo",
     	        <span style="color:#ff0000;">hiddenName:'tableName',</span>
     	        name:'tableName',
     	        displayField: 'name',
     	       	valueField: 'abbr',   	    
     	       	store:states
     	       
             	}
            ]  
	    });  
	
	var win = Ext.create('widget.window', {
         title: '导入',
         modal:true,//模态的 后面的页面就不能点了 
         header: {
             titlePosition: 2,
             titleAlign: 'center'
         },
         closable: true,
         closeAction: 'hide',
         width: 600,
         minWidth: 350,
         height: 350,
         tools: [{type: 'pin'}],
         layout: {
             type: 'border',
             padding: 5
         },
         items: [ {
        	 region: 'center',
             items: [uploadForm]
           
         }],
         buttons: [{  
             text: '上传文件',  
             handler: function(){  
                 var form = uploadForm.getForm();  
                 if(form.isValid){
                     form.submit({  
                    	 url: url,//后台处理的页面  
                         waitMsg: '正在上传文件请稍后...',
                         method:'POST',
                         success: function(fp, o){  
                             Ext.Msg.alert('提示信息', o.result.message);
                             win.close(); 
                             deleteDiv('upfilesyswin');
                         }  
                     });  
                 }  
             }  
         }]  
     });
		String table = request.getParameter("tableName");
		long starttime = System.currentTimeMillis();
		request.setCharacterEncoding("utf-8");// 防止中文乱码
		response.setCharacterEncoding("utf-8");
		int sizeThreshold = 1024 * 6; // 缓存区大小
		String basePath = this.getServletContext().getRealPath("/upload/");
		File repository = new File(basePath); // 缓存区目录
		long sizeMax = 1024 * 1024 * 2;// 设置文件的大小为2M
		final String allowExtNames = "xls,xlsx";
		DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory();
		diskFileItemFactory.setRepository(repository);
		diskFileItemFactory.setSizeThreshold(sizeThreshold);
		
		 if(!repository.exists()){
			 repository.mkdir();
		}
		ServletFileUpload servletFileUpload = new ServletFileUpload(diskFileItemFactory);
	
		servletFileUpload.setSizeMax(sizeMax);
		List<FileItem> fileItems = null;
		String tableName = null;
		InputStream fis =null;
		try {
			fileItems = servletFileUpload.parseRequest(request);
			for (FileItem fileItem : fileItems) {           //此处解析
				@SuppressWarnings("unused")
				long size = 0;
				String fileName = fileItem.getName();
				//System.out.println(fileName);
				
				String fieldName = fileItem.getFieldName();
				if("tableName".equals(fieldName)){
					tableName = fileItem.getString();
					
				}
				if (fileName == null || fileName.trim().length() == 0)
					continue;
				String extName = fileName.substring(fileName.lastIndexOf(".") + 1);
				
说明一下问题所在:
1,combobox后台拿不到数据
2,在formPanel表单里面添加了filefield和combo两个部分,发现经过后台的代码只能拿到File,不能通过request.getParamter()拿到Combobox的值
解决问题:
combobox需要定义hiddenName才能通过request.getParamter拿到对应的值,但是奇怪的是在form表单中添加了filefield后Servlet也不能拿到combobox的值了。
在debug中发现ServletFileUpload解析request对象时返回的fileItems的数量和表单中的元素数量一致,猜想由于文件上传使用二进制流的形式,所以页面的元素也被封装到这个流里面去了,在后来的debug中发现消失的combobox值
总结:
由于本人暂时初学,不太理解浏览器的交互和servlet与tomcat的封装,在以后的研究中会逐渐补足本文的深层次原理



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值