有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

EXTJS和javastruts导出csv文件

我想制作一个csv文件,让用户点击按钮下载。 有一个表单可以搜索用户(带有一些搜索字段)和按钮搜索:这是搜索用户并在网格中显示他们。 在表单之后,有一个链接“导出到csv”,这个链接必须获取表单字段值,将其传递给Java(struts),然后Java构造一个csv文件(与网格不同,它更复杂,许多表中的值)并将其返回到extjs,之后,我想将其交给用户,让他下载。回应。responseText包含要导出的良好csv,但它太大,无法执行编码URI:(

我无法提议下载该文件。有人知道吗(

以下是我目前所做的源代码:

var params = Ext.getCmp("userSearchEngine").getForm().getValues(false);
Ext.Ajax.request({
    url : cmts.server + 'exportToCSV.do',
    method: 'POST',
    headers: { 'Content-Type': 'text/csv'},                    
    params : params,

    success: function ( response, request ) {
        console.log('success');
        console.log(response.responseText);
    },

    failure: function ( response, request ) {
        console.log('FAIL !');
    }
});

谢谢你的帮助:)

编辑:Java部件写入响应的outputstream

编辑2:由于某些限制,我无法在服务器端创建文件


共 (2) 个答案

  1. # 1 楼答案

    对于下载文件,您可以尝试表单提交

    var form = Ext.create('Ext.form.Panel', {
      standardSubmit : true,
      url : url,
      method : 'POST' // OR 'GET'
    });
    
    form.submit({
      target : '_blank',
      params : {
    
      }
    });
    

    在serverside-java中:

    response.setContentType("application/vnd.ms-excel");
    response.addHeader("Content-Disposition",
        "attachment; filename=" + URLEncoder.encode(fileName)
            + ".csv");
    
    IOUtils.copy(theCSVInputStream, response.getOutputStream())
    
  2. # 2 楼答案

    我使用这种方法:

    1. 一张分机表格。FieldContainer作为链接
    2. 服务器端(在我的例子中是PHP)在“tmp”目录中生成文件
    3. 服务器端返回有效的JSON,其中包含生成文件的名称
    4. AJAX请求更改Ext.form的链接。FieldContainer

    部分示例:

    ExtJS部分-字段容器:

    {
    id: 'generatecsv',
    xtype: 'fieldcontainer',
    width: 100,
    layout: 'vbox',
    items: [
        {xtype: 'displayfield', value: ''},
        {
        id: 'dds19_link_disk',
        xtype: 'box', 
        autoEl: {
            html: '<a href="./tmp/" target="_blank">Download CSV</a>',
            width: 100
        } 
        }
    ]   
    }
    

    ExtJS-AJAX请求:

    Ext.Ajax.request({
        method: 'POST', 
        url: './src/xxxxx.php',
        jsonData: Ext.JSON.encode({
        }),
        success: function(response){
            var r = Ext.JSON.decode(response.responseText);
            if (r.success == true) { 
                Ext.getCmp('generatecsv').el.update('<a href="./tmp/'+r.filename+'" target="_blank">ZIP архив</a>');
            } else {
                Ext.Msg.alert('Error', r.errmsg);       
            };
        },
        failure: function(response){
            Ext.Msg.alert('Error', 'Error.');       
        }
    });
    

    来自服务器的有效JSON:

    {
    "success": true,
    "filename": "generated_file_name.csv"
    }