wicket下载输出流

wicket下载输出流,wicket,wicket-1.6,wicketstuff,Wicket,Wicket 1.6,Wicketstuff,我想下载csv文件,我把响应内容写下来,很明显,wicket在我后面写,我得到的内容是html页面,它应该是我的csv 我在示例中看到了throw new AbortException()的用法; 我使用的是6.7版本,你知道我的wicket版本是否有其他东西吗? 或者说我做错了什么 你能帮我 add(new Link<Void>("export") { @Override public void onClick() { W

我想下载csv文件,我把响应内容写下来,很明显,wicket在我后面写,我得到的内容是html页面,它应该是我的csv

我在示例中看到了throw new AbortException()的用法; 我使用的是6.7版本,你知道我的wicket版本是否有其他东西吗? 或者说我做错了什么

你能帮我

 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);
    }
}
添加(新链接(“导出”){ @凌驾 公共void onClick(){ WebResponse=(WebResponse)getResponse(); response.setAttachmentHeader(“export.csv”); response.setContentType(“text/csv”); OutputStream out=getResponse().getOutputStream(); 试一试{ c、 exportData(dataSource.getListForExport(),列,输出); }捕获(例外情况除外){ 系统错误打印项次(ex); } } }); public void exportData(列表列表、列表列、OutputStream OutputStream) 抛出IOException{ long startTime=System.nanoTime(); PrintWriter out=新的PrintWriter(新的OutputStreamWriter(outputStream,Charset.forName(characterSet)); 试一试{ 如果(IsExporthReadersEnabled()){ 布尔值优先=真; 用于(IGRID列:列){ 如果(第一){ 第一个=假; }否则{ 打印输出(分隔符); System.out.println(分隔符); } if(col.getId().equals(“复选框”)){ 继续; } out.print(quoteValue(col.getId()); System.out.println(col.getId()); } 输出。打印(“\r\n”); System.out.println(“\r\n”); }
迭代器执行此操作的最佳方法是使用动态资源。我建议您阅读此免费Wicket指南的“Wicket资源管理”一章:

在这里,您可以在本指南的“自定义资源”一节中看到一个类似的示例

然后您需要在所需页面或组件中添加链接:

add(new ResourceLink("rssLink", new RSSProducerResource()));

最好的方法是使用动态资源。我建议您阅读本免费Wicket指南的“Wicket资源管理”一章:

在这里,您可以在本指南的“自定义资源”一节中看到一个类似的示例

然后您需要在所需页面或组件中添加链接:

add(new ResourceLink("rssLink", new RSSProducerResource()));