wicket下载输出流
我想下载csv文件,我把响应内容写下来,很明显,wicket在我后面写,我得到的内容是html页面,它应该是我的csv 我在示例中看到了throw new AbortException()的用法; 我使用的是6.7版本,你知道我的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
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()));