DownloadLink
沿以下几行创建用于下载文件的按钮/链接非常方便:
add(new DownloadLink("downloadButton", getReportFile(), "report.pdf"));
和
<input type="button" wicket:id="downloadButton" value="Download" />
但是,我想 触发仅在单击按钮/链接时下载文件的生成
。换句话说,单击后,我将调用一个方法来生成文件(在本例中为Pentaho报告),将其放置在临时位置并返回File
指向该文件的指针。然后我告诉那个DownloadLink
使用它File
。问题是,
这有可能 吗?
目前,我们有类似下面的代码,可以正常工作,但是我对是否DownloadLink
可以代替它感兴趣。
add(new Link<Void>("downloadButton") {
@Override
public void onClick() {
IResourceStream resourceStream = new AbstractResourceStreamWriter() {
@Override
public void write(OutputStream output) {
try {
reportService.generateReport(output, report);
} catch (IOException e) {
// ...
}
}
@Override
public String getContentType() {
return CONTENT_TYPE_PDF;
}
};
getRequestCycle()
.setRequestTarget(new ResourceStreamRequestTarget(resourceStream)
.setFileName("report.pdf"));
}
});
(如果有区别,请参见1.4.18节。)
您不能使用以Model
as作为参数的构造函数吗?并且使Model
产生File
在其getObject()
。LoadableDetachableModel
鉴于load()
,因此文件生成将仅被调用一次,因此A
是一个不错的选择。
如果要在每次单击链接时重新生成文件,请使用,DownloadLink.setDeleteAfterDownload(true)
以确保在提供文件后自动将其删除。
我没有使用1.4,但是1.3中的源代码显示File
通过getModelObject()
的onClick()
方法检索到Link
。
IModel fileModel = new AbstractReadOnlyModel(){
public Object getObject() {
return generateFile();
}
};
DownloadLink link = new DownloadLink(linkId, fileModel, "report.pdf");
源代码
DownloadLink.onClick()
public void onClick()
{
final File file = (File)getModelObject();
...
IResourceStream resourceStream = new FileResourceStream(
new org.apache.wicket.util.file.File(file));
getRequestCycle().setRequestTarget(.../* uses resourceStream */...);
}
问题内容: 我有一个自定义插件,可以在(请注意此处没有工具名)下生成源。所以我得到像…等的资源。 此格式完全不能更改,因此我将能够配置Intellij将其添加为源文件夹。到目前为止,我可以看到Intellij已添加为源文件夹。 请注意,我没有配置插件的选项! 更新1 :我不同意我必须将生成的源放置在工具名称文件夹下的事实。这可能是一个很好的约定,但是如果我只有一个生成器,是否不需要我将其放置在那里
我必须在运行时动态生成一个xml文件。请帮助我使用PHP动态生成下面的XML文件。 null
问题内容: 我正在构建一个Wicket Web应用程序,它将必须处理很多同时请求。我已经设置了一个测试环境和一些jmeter脚本来进行负载测试,并且我注意到,如果我将大多数页面设置为无状态,则可以减少应用程序的CPU和内存占用。 我已将代码添加到最大页面的onBeforeRender()方法中,以向我显示哪些组件导致页面变为有状态。这是我用于检测的代码: 在输出中,我看到有状态行为是由页面中某些现
问题内容: 我正在使用Spring,Spring Data JPA,Spring Security,Primefaces的项目中工作… 在本教程中,你只能在预定义的数据源之间实现动态数据源切换。 这是我的代码的片段: springContext-jpa.xml 我想做的就是使targetDataSources映射也与其元素一样动态。 换句话说,我想获取某个数据库表,使用存储在该表中的属性创建我的数
我在一个使用Spring、Spring数据JPA、Spring Security、Primefaces的项目中工作。。。 我正在学习关于spring动态数据源路由的教程。 在本教程中,您只能在预定义的数据源之间实现动态数据源切换。 以下是我的代码片段: springContext jpa。xml 我想做的是使targetDataSources映射与它的元素一样动态。 换句话说,我想获取一个特定的数
我想启动一个反序列化动态创建的类的流。这个Bean是使用反射和URLCLassLOader创建的,参数为给定的字符串类,但是KafkaStreams API不识别我的新类。 流与预创建的Beans完美配合,但使用动态Beans时会自动关闭。反倾销者是和杰克逊一起创造的,也是单独工作的。 下面是类解析器代码 首先,我实例化接收类作为参数的serde 然后启动使用此Serdes的流拓扑 流拓扑应该正常