2012-11-12 3 views
0

J'essaie d'exporter des données vers un fichier csv à partir d'une base de données mysql et je ne comprends pas. J'ai la prochaine chose.exporter des données vers csv et télécharger le fichier avec Java et Struts2

Dans le jsp, j'ai ceci:

<s:url id="fileDownload" namespace="/" action="download" ></s:url> 
<a href="%{fileDownload}"><s:submit value="Exportar CSV" id="btn_exportar_csv" name="btn_exportar_csv" cssClass="botones" width="50px"></s:submit></a> 

Dans le fichier struts j'ai ceci:

<action name="download" class="es.uniway.action.pedidos.ExportarFicherosAction"> 
<result name="success" type="stream"> 
    <param name="contentType">application/octet-stream</param> 
    <param name="inputName">fileInputStream</param> 
    <param name="contentDisposition">attachment;filename="fileABC.txt"</param> 
    <param name="bufferSize">1024</param> 
</result> 

Et dans l'action que j'ai ceci:

package es.uniway.action.pedidos; 

import java.io.ByteArrayInputStream; 
import java.io.FileWriter; 
import java.io.IOException; 
import java.io.InputStream; 
import java.text.DateFormat; 
import java.text.SimpleDateFormat; 
import java.util.Calendar; 
import java.util.Date; 
import java.util.List; 
import java.util.Map; 

import javax.servlet.ServletOutputStream; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

import org.apache.axis.MessageContext; 
import org.apache.struts2.interceptor.ServletRequestAware; 

import Services.Web.CCIS.BasicHttpBinding_PublicApiServiceStub; 
import Services.Web.CCIS.PublicApiService_PortType; 

import com.opensymphony.xwork2.ActionContext; 
import com.opensymphony.xwork2.ActionSupport; 

import es.uniway.bean.TPedidosClientes; 
import es.uniway.bean.TRespuestaPedidosClientes; 
import es.uniway.bean.Tdatoscuentas; 
import es.uniway.wscloud.WscloudImplServiceLocator; 
import es.uniway.wscloud.WscloudImplSoapBindingStub; 

public class ExportarFicherosAction extends ActionSupport implements ServletRequestAware{ 


Map session; 
Tdatoscuentas [] datoscuentas; 
private HttpServletRequest servletRequest; 
private HttpServletResponse response; 
TRespuestaPedidosClientes pedidosClientes; 
TPedidosClientes [] pedClientes; 
private List<Date> FechaAprobacion; 
public boolean submit=false; 
Date dateC=null; 
Date dateI=new Date(); 
Date dateF=new Date(); 
Date date1=new Date(); 
Date date2= new Date(); 
Date []fechas= null; 
Date []fechasI = null; 
Date []fechasF = null; 
private String cuentasID; 
public String nuevaBusqueda; 

@Override 
public void setServletRequest(HttpServletRequest request) { 
    // TODO Auto-generated method stub 

} 

@Override 
public String execute() throws Exception { 
    // TODO Auto-generated method stub 

    response.setContentType("application/octet-stream"); 
    response.setHeader("Content-Disposition","attachment;filename=temp.csv"); 


    ServletOutputStream out = response.getOutputStream(); 



    java.net.URL portAddressCloud = new java.net.URL("http://localhost:8080/webServiceCloud2/services/WscloudImpl"); 

    WscloudImplServiceLocator wscloudServiceLocator = new WscloudImplServiceLocator(); 
     //WscloudImpl wscloud = wscloudServiceLocator.getWscloudImpl(portAddress); 

     WscloudImplSoapBindingStub bsStubcloud=null; 
     bsStubcloud=(WscloudImplSoapBindingStub) wscloudServiceLocator.getWscloudImpl(portAddressCloud); 

    session = ActionContext.getContext().getSession(); 
    PublicApiService_PortType puerto=(PublicApiService_PortType) session.get("puerto"); 
    ((BasicHttpBinding_PublicApiServiceStub)puerto).setMaintainSession(true); 
    MessageContext ctx=(MessageContext) session.get("contexto"); 
    session.put("date1", date1); 
    session.put("date2", date2); 
    String usuario=(String) session.get("usuario"); 
    System.out.println("Usuario es:"+usuario); 
    String id_tipo_cuenta = (String) session.get("id_tipo_cuenta"); 
    String n_cuenta = (String) session.get("n_cuenta"); 
    System.out.println("El id_tipo_cuenta es:"+id_tipo_cuenta+" y el número de cuenta es:"+n_cuenta); 
    Tdatoscuentas[] params=bsStubcloud.consultarCuentas(Integer.parseInt(id_tipo_cuenta),n_cuenta); 
    System.out.println("Params es"+params.length); 
    System.out.println("el id de params es:"+params[0].getId_cuenta()); 
    System.out.println("EL id de params de cuenta padre es:"+params[0].getId_cuenta_padre()); 
    session.put("params", params); 
    int cliente=Integer.valueOf(servletRequest.getParameter("cuentasID").toString()); 

    if(cliente!=-1){ 

      String esquema=(String) session.get("Id_esquema_asociado_session"); 
      String proveedor=(String) session.get("Id_proveedor_cloud_session"); 

      System.out.println("El esquema es:"+esquema); 
      System.out.println("El proveedor es:"+proveedor); 
      System.out.println("La fecha es:"+servletRequest.getParameter("date1")); 
      System.out.println("Esto es:"+servletRequest.getParameter("edt_pedido")); 
      int nivel=Integer.valueOf(id_tipo_cuenta); 
      int cuenta=Integer.valueOf(servletRequest.getParameter("cuentasID")); 
      DateFormat formatter ; 
       Date date ; 
       formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss"); 
       date = (Date)formatter.parse(servletRequest.getParameter("date1")); 
       Calendar cal=Calendar.getInstance(); 
       cal.setTime(date); 
       System.out.println("Today is " +date); 
       System.out.println("Today dos:"+cal.getTime()); 
       Date f_inicioAux=cal.getTime(); 
       Date date2 = (Date)formatter.parse(servletRequest.getParameter("date2")); 
       Calendar calF=Calendar.getInstance(); 
       cal.setTime(date2); 
       System.out.println("Today is " +date.toString()); 




      pedidosClientes=bsStubcloud.consultarPedidosClientes(params[0].getId_cuenta_padre(), nivel, cuenta, cal, calF, 0, servletRequest.getParameter("edt_pedido").toString(),date.toString(),date2.toString()); 
      pedClientes=pedidosClientes.getDatosPedidosClientes(); 

      fechas= new Date[pedidosClientes.getDatosPedidosClientes().length]; 
      fechasI = new Date[pedidosClientes.getDatosPedidosClientes().length]; 
      fechasF = new Date[pedidosClientes.getDatosPedidosClientes().length]; 
      for(int i=0;i<pedidosClientes.getDatosPedidosClientes().length;i++){ 
        System.out.println("iiiiiiiii"+pedidosClientes.getDatosPedidosClientes().length); 
        dateC=pedidosClientes.getDatosPedidosClientes()[i].getF_creacion().getTime(); 
        dateI=pedidosClientes.getDatosPedidosClientes()[i].getF_inicio_contrato().getTime(); 
        dateF=pedidosClientes.getDatosPedidosClientes()[i].getF_fin_contrato().getTime(); 

        fechas[i]=dateC; 
        fechasI[i]=dateI; 
        fechasF[i]=dateF; 
        System.out.println(dateF); 

        //FechaAprobacion.add(dateC); 
       } 


      setFechas(fechas); 
      setFechasI(fechasI); 
      setFechasF(fechasF); 

      setPedClientes(pedClientes); 

      System.out.println("Pedidos clientes ha devuelto:"+pedidosClientes.getDatosPedidosClientes().length); 

      StringBuffer sb = exportar_CSV(pedClientes); 
      //session.put("pedidos",pedidosClientes); 

      InputStream in = 
         new ByteArrayInputStream(sb.toString().getBytes("UTF-8")); 

      byte[] outputByte = new byte[4096]; 
      //copy binary contect to output stream 
      while(in.read(outputByte, 0, 4096) != -1) 
      { 
       out.write(outputByte, 0, 4096); 
      } 
      in.close(); 
      out.flush(); 
      out.close(); 

      } 

      return "SUCCESS"; 
    } 



    public HttpServletRequest getServletRequest() { 
      return servletRequest; 
     } 

     public Tdatoscuentas[] getDatoscuentas() { 
      return datoscuentas; 
     } 

     public void setDatoscuentas(Tdatoscuentas[] datoscuentas) { 
      this.datoscuentas = datoscuentas; 
     } 

     public boolean isSubmit() { 
      return submit; 
     } 

     public void setSubmit(boolean submit) { 
      this.submit = submit; 
     } 

     public TRespuestaPedidosClientes getPedidosClientes() { 
      return pedidosClientes; 
     } 

     public void setPedidosClientes(TRespuestaPedidosClientes pedidosClientes) { 
      this.pedidosClientes = pedidosClientes; 
     } 

     public TPedidosClientes[] getPedClientes() { 
      return pedClientes; 
     } 

     public void setPedClientes(TPedidosClientes[] pedClientes) { 
      this.pedClientes = pedClientes; 
     } 



     public Date[] getFechas() { 
      return fechas; 
     } 

     public void setFechas(Date[] fechas) { 
      this.fechas = fechas; 
     } 

     public Date[] getFechasI() { 
      return fechasI; 
     } 

     public void setFechasI(Date[] fechasI) { 
      this.fechasI = fechasI; 
     } 

     public Date[] getFechasF() { 
      return fechasF; 
     } 

     public void setFechasF(Date[] fechasF) { 
      this.fechasF = fechasF; 
     } 

     public String getCuentasID() { 
      return cuentasID; 
     } 

     public void setCuentasID(String cuentasID) { 
      this.cuentasID = cuentasID; 
     } 

     public HttpServletResponse getResponse() { 
      return response; 
     } 

     public void setResponse(HttpServletResponse response) { 
      this.response = response; 
     } 

     public Date getDateI() { 
      return new Date(); 
     } 

     public void setDateI(Date dateI) { 
      this.dateI = dateI; 
     } 

     public Date getDateF() { 
      return new Date(); 
     } 

     public void setDateF(Date dateF) { 
      this.dateF = dateF; 
     } 

     public Date getDate1() { 
      return date1; 
     } 

     public void setDate1(Date date1) { 
      this.date1 = date1; 
     } 

     public Date getDate2() { 
      return date2; 
     } 

     public void setDate2(Date date2) { 
      this.date2 = date2; 
     } 

     public String getNuevaBusqueda() { 
      return nuevaBusqueda; 
     } 

     public void setNuevaBusqueda(String nuevaBusqueda) { 
      this.nuevaBusqueda = nuevaBusqueda; 
     } 



     private static StringBuffer exportar_CSV(TPedidosClientes[] pedClientes2) throws IOException { 
      // TODO Auto-generated method stub 



      StringBuffer writer = new StringBuffer(); 
       writer.append("NºPedido"); 
       writer.append(','); 
       writer.append("Estado"); 
       writer.append(','); 
       writer.append("Fecha_Pedido"); 
       writer.append(','); 
       writer.append("Fecha_Inicio"); 
       writer.append(','); 
       writer.append("Fecha_Final"); 
       writer.append(','); 
       writer.append("PVP"); 
       writer.append(','); 
       writer.append("Coste"); 
       writer.append('\n'); 

       for(int i=0;i<pedClientes2.length;i++){ 
        writer.append(pedClientes2[i].getN_pedido()); 
        writer.append(','); 
        writer.append(pedClientes2[i].getEstado_pedido()); 
        writer.append(','); 
        writer.append(pedClientes2[i].getF_creacion().getTime().toString()); 
        writer.append(','); 
        writer.append(pedClientes2[i].getF_inicio_contrato().getTime().toString()); 
        writer.append(','); 
        writer.append(pedClientes2[i].getF_fin_contrato().getTime().toString()); 
        writer.append(','); 
        writer.append(pedClientes2[i].getPvp().toString()); 
        writer.append(','); 
        writer.append(pedClientes2[i].getP_coste().toString()); 



        writer.append('\n'); 
       } 


       return writer; 

     } 

} 

qu'est-ce que je fais de mal ?. Merci beaucoup

+0

Quel est le problème auquel vous étiez confronté? erreur/exception. –

+0

Quand je clique sur le bouton je n'ai rien et je n'ai aucune sorte d'exception – zoit

+0

Est-ce que ça frappe votre classe d'action en mode debug? –

Répondre

0

Vous le faites facilement en utilisant SELECT déclaration. Il suffit de lancer une commande comme celui-ci -

SELECT * FROM table INTO OUTFILE 'file name'; 
Questions connexes