2013-05-27 4 views
0

Я хочу, чтобы загрузить файл CSV, я взять на себя содержание ответа и запись на него, apprently калитки запись после меня и IAM контента получать страницу HTML, где он должен быть моим CSVкалитки загрузить выходной поток

У меня есть в примере показано использование throw new AbortException(); Я использую версию 6.7, вы знаете, если моя калитка версии имеет что-то вместо нее? или, вернее, я делаю неправильно Somthing ....

Пожалуйста, вы можете мне помочь ...

add(new Link<Void>("export") { 
     @Override 
     public void onClick() { 

      WebResponse response = (WebResponse) getResponse(); 
      response.setAttachmentHeader("export.csv"); 
      response.setContentType("text/csv"); 

      OutputStream out = getResponse().getOutputStream(); 

      try { 
       c.exportData(dataSource.getListForExport(), columns, out); 

      } catch (Exception ex) { 
       System.err.println(ex); 
      } 

     } 

    }); 




    public <T> void exportData(List<T> list, List<IGridColumn<IDataSource<T>, T, String>> columns, OutputStream outputStream) 
     throws IOException { 
    long startTime = System.nanoTime(); 
    PrintWriter out = new PrintWriter(new OutputStreamWriter(outputStream, Charset.forName(characterSet))); 
    try { 
     if (isExportHeadersEnabled()) { 
      boolean first = true; 
      for (IGridColumn<IDataSource<T>, T, String> col : columns) { 
       if (first) { 
        first = false; 
       } else { 
        out.print(delimiter); 
        System.out.println(delimiter); 
       } 
       if (col.getId().equals("checkBox")) { 
        continue; 
       } 
       out.print(quoteValue(col.getId())); 
       System.out.println(col.getId()); 
      } 
      out.print("\r\n"); 
      System.out.println("\r\n"); 
     } 
     Iterator<? extends T> rowIterator = list.iterator(); 
     while (rowIterator.hasNext()) { 
      T row = rowIterator.next(); 

      boolean first = true; 
      for (IGridColumn<IDataSource<T>, T, String> col : columns) { 
       if (first) { 
        first = false; 
       } else { 
        out.print(delimiter); 
        System.out.println(delimiter); 
       } 
       if (col.getId().equals("checkBox")) { 
        continue; 
       } 
       Object o = (new PropertyModel<>(row, col.getId())).getObject();// ((AbstractColumn<T, 

       if (o != null) { 
        Class<?> c = o.getClass(); 
        String s; 
        IConverter converter = Application.get().getConverterLocator().getConverter(c); 

        if (converter == null) { 
         s = o.toString(); 
        } else { 
         s = converter.convertToString(o, Session.get().getLocale()); 
        } 

        out.print(quoteValue(s)); 
        System.out.println(quoteValue(s)); 
       } 
      } 
      out.print("\r\n"); 
      System.out.println("\r\n"); 
     } 
    } catch (Exception ex) { 
     System.out.println(ex); 
    } finally { 
     System.out.println(out); 
     out.close(); 

     // measure 
     System.out.print(System.nanoTime() - startTime); 
    } 
} 

ответ

3

Лучший способ сделать это с помощью динамических ресурсов. Я предлагаю вам прочитать главу «Управление ресурсами с помощью Wicket» этого бесплатного гида по калитки: https://code.google.com/p/wicket-guide/.

Здесь приведен пример, приведенный в этом руководстве в разделе «Пользовательские ресурсы».

public class RSSProducerResource extends AbstractResource { 

@Override 
protected ResourceResponse newResourceResponse(Attributes attributes) { 
    ResourceResponse resourceResponse = new ResourceResponse(); 
    resourceResponse.setContentType("text/xml"); 
    resourceResponse.setTextEncoding("utf-8"); 
    resourceResponse.setWriteCallback(new WriteCallback() 
    { 
     @Override 
     public void writeData(Attributes attributes) throws IOException 
     { 
      OutputStream outputStream = attributes.getResponse().getOutputStream(); 
      Writer writer = new OutputStreamWriter(outputStream); 
      SyndFeedOutput output = new SyndFeedOutput(); 
      try { 
       output.output(getFeed(), writer); 
      } catch (FeedException e) { 
       throw new WicketRuntimeException("Problems writing feed to      response..."); 
      } 
     } 
    }); 
    return resourceResponse; 
} 

// method getFeed()... 

} 

И тогда вам нужно добавить ссылку на нужную страницу или компонента:

add(new ResourceLink("rssLink", new RSSProducerResource())); 
Смежные вопросы