如何将 Wicket 的 DownloadLink 与动态生成的文件一起使用?

2024-03-19

DownloadLink https://ci.apache.org/projects/wicket/apidocs/1.4.x/org/apache/wicket/markup/html/link/DownloadLink.html创建用于下载文件的按钮/链接非常方便,如下所示:

add(new DownloadLink("downloadButton", getReportFile(), "report.pdf"));

and

<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"));
  }
});

(Wicket 1.4.18,如果有影响的话。)


你不能使用带有 a 的构造函数吗Model作为论点?并使Model生成File in its getObject(). A LoadableDetachableModel是一个不错的选择,因为load(),因此文件生成将仅被调用一次。

如果每次单击链接时都要重新生成文件,请使用DownloadLink.setDeleteAfterDownload(true) http://wicket.apache.org/apidocs/1.4/org/apache/wicket/markup/html/link/DownloadLink.html#setDeleteAfterDownload(boolean)以确保文件在送达后自动删除。

我不使用1.4,但1.3中的源代码显示File是通过以下方式检索的getModelObject() in the onClick()的方法Link.

IModel fileModel = new AbstractReadOnlyModel(){
    public Object getObject() { 
        return generateFile();
    }
};

DownloadLink link = new DownloadLink(linkId, fileModel, "report.pdf");

的源代码DownloadLink.onClick() http://wicket.apache.org/apidocs/1.4/org/apache/wicket/markup/html/link/DownloadLink.html#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 */...);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将 Wicket 的 DownloadLink 与动态生成的文件一起使用? 的相关文章

  • 从 java sdk 向对等方发送提案时出现访问被拒绝错误

    我正在尝试使用以下代码查询区块链并收到访问被拒绝错误 我也遇到同样的错误sendTransactionProposal方法也是如此 UserContext adminUserContext RegisterEnrollUser regist
  • JDK 文档是语言规范的一部分吗?

    只有一名官员Java语言规范 https docs oracle com javase specs jls se8 html index html所有 Java 实现都必须遵守它 API文档怎么样 所有Java实现都需要遵守吗这个版本 ht
  • 如何将 javax.persistence.Column 定义为 Unsigned TINYINT?

    我正在基于 MySQL 数据库中的现有表创建 Java 持久性实体 Bean 使用 NetBeans IDE 8 0 1 我在这个表中遇到了一个字段 其类型为 无符号 TINYINT 3 我发现可以执行以下操作将列的类型定义为 unsign
  • Java:在 eclipse 中导出到 .jar 文件

    我正在尝试将 Eclipse 中的程序导出到 jar 文件 在我的项目中 我添加了一些图片和 PDF s 当我导出到 jar 文件时 似乎只有main已编译并导出 我的意愿是如果可能的话将所有内容导出到 jar 文件 因为这样我想将其转换为
  • 在 Wildfly 中与 war 部署共享 util jar 文件

    假设我有一个名为 util jar 的 jar 文件 该 jar 文件主要包含 JPA 实体和一些 util 类 无 EJB 如何使这个 jar 可用于 Wildfly 中部署的所有 war 无需将 jar 放置在 war 的 WEB IN
  • org.hibernate.QueryException:无法解析属性:文件名

    我正在使用休眠Criteria从列中获取值filename在我的桌子上contaque recording log 但是当我得到结果时 它抛出异常 org hibernate QueryException 无法解析属性 文件名 com co
  • 是否可以使用 Flying Saucer (XHTML-Renderer) 将 css 解析为类路径资源?

    我正在尝试将资源打包到 jar 中 但我无法让 Flying Saucer 在类路径上找到 css 我无法轻松构建 URL 来无缝解决此问题 https stackoverflow com questions 861500 url to l
  • 如何在代理后面安装 Eclipse Neon

    对于 Neon Eclipse 附带了一个安装程序 我在安装程序中找不到任何配置菜单 我的java版本是 java version java version 1 8 0 72 Java TM SE Runtime Environment b
  • 如何根据运行的 jar 的结果让我的 ant 任务通过或失败?

    我正在运行 CrossCheck 无浏览器 js 单元测试 作为 ant 脚本的一部分 如果 CrossCheck 测试失败 我希望 ant 报告失败 这是 build xml 中的相关部分
  • 当客户端关闭连接时,Spring StreamingResponseBody 请求线程未清理

    我在控制器中有一个端点 它返回一个StreamingResponseBody 用于向客户端发送文件 其代码大致如下 RestController RequestMapping value api public class Controlle
  • 生成的序列以 1 开头,而不是注释中设置的 1000

    我想请求一些有关 Hibernate 创建的数据库序列的帮助 我有这个注释 下面的代码 在我的实体类中 以便为合作伙伴表提供单独的序列 我希望序列以 1000 开头 因为我在部署期间使用 import sql 将测试数据插入数据库 并且我希
  • Java:如何为山区时间创建 TimeZone 对象?

    必须不禁用夏令时 嗯 在这个清单 http en wikipedia org wiki List of tz database time zones在 zoneinfo 时区名称中 有很多声称是 山地时间 找到最适合您想要的那个 然后使用它
  • 读取电子邮件的文本文件转换为 Javamail MimeMessage

    我有一个电子邮件原始来源的文本文件 直接从 gmail 复制 如果您单击 查看原始文件 您就会看到它 我想读入该文件并将其转换为 MimeMessage 如果您好奇为什么 我设置了 JavaMaildir 并且需要用电子邮件填充它的收件箱以
  • HashMap 值需要不可变吗?

    我知道 HashMap 中的键需要是不可变的 或者至少确保它们的哈希码 hashCode 不会改变或与另一个具有不同状态的对象发生冲突 但是 HashMap中存储的值是否需要与上面相同 为什么或者为什么不 这个想法是能够改变值 例如在其上调
  • Docker 和 Eureka 与 Spring Boot 无法注册客户端

    我有一个使用 Spring Boot Docker Compose Eureka 的非常简单的演示 我的服务器在端口 8671 上运行 具有以下应用程序属性 server port 8761 eureka instance prefer i
  • 使用按钮作为列表的渲染器

    我想使用一个更复杂的渲染器 其中包含列表的多个组件 更准确地说 类似于this https stackoverflow com questions 10840498 java swing 1 6 textinput like firefox
  • 如何重新启动死线程? [复制]

    这个问题在这里已经有答案了 有哪些不同的可能性可以带来死线程回到可运行状态 如果您查看线程生命周期图像 就会发现一旦线程终止 您就无法返回到新位置 So 没有办法将死线程恢复到可运行状态 相反 您应该创建一个新的 Thread 实例
  • 在浏览器刷新中刷新检票面板

    我正在开发一个付费角色系统 一旦用户刷新浏览器 我就需要刷新该页面中可用的统计信息 统计信息应该从数据库中获取并显示 但现在它不能正常工作 因为在页面刷新中 java代码不会被调用 而是使用以前的数据加载缓存的页面 我尝试添加以下代码来修复
  • Java EE 目录结构

    我对以下教程有疑问 http www mkyong com jsf2 jsf 2 internationalization example http www mkyong com jsf2 jsf 2 internationalizatio
  • 在java中使用多个bufferedImage

    我正在 java 小程序中制作游戏 并且正在尝试优化我的代码以减少闪烁 我已经实现了双缓冲 因此我尝试使用另一个 BufferedImage 来存储不改变的游戏背景元素的图片 这是我的代码的相关部分 public class QuizApp

随机推荐

  • 使用 Cordova 3.7 从 iOS 8 上的 www 文件夹加载资源 (file://)

    我有一个混合应用程序 可以使用 Cordova 3 7 和 jQuery Mobile 1 3 2 在 iOS 7 上完美运行 我正在 iOS 8 上测试它 但它坏了 我使用绝对路径请求应用程序的每个页面 视图 使用file 协议 例如 f
  • 如何在 Windows 上模拟 iPad 浏览器

    如何在windows下模拟iPad浏览器 我知道用户代理字符串 并且我知道浏览器宽度 高度 屏幕宽度 高度 我相信 如果您模拟 iPad 的用户代理并适当设置窗口大小 您就可以使用 Safari Windows 从 apple com 下载
  • 如何在 UML 属性中指定枚举文字作为默认值?

    我目前使用 EMF UML Implementation 进行一些模型转换 在我的模型转换中 我创建了一个具有一些属性的 uml 类 这些属性是我也创建的枚举类型 某些属性应该获得默认值 默认值应该是枚举文字 现在的问题是 如何将枚举文字获
  • 如何在 jQuery 中将值从一个页面传递到另一个页面

    我有两个 jQuery 页面 Page1 和 Page2 并且我能够在 Page1 中获取输入 The somval 1000 第 1 页用户输入某个值 我已经存储了该值 var val somval 现在在第二页中 我需要获取第1页中so
  • 使用 keycloak 进行 Spring Boot 测试

    我正在尝试运行简单的单元测试 Keycloak 以正确的方式配置 我测试了它 我的 mvc 应用程序正在连接并且用户已通过身份验证 但现在我尝试测试我的控制器 即使 我使用 spring slices keycloak 适配器被调用并给我错
  • .htaccess 当某些文件不存在时重定向到 404 页面

    我使用自己的 MVC 系统已经有一段时间了 它运行得很好 我在我的 htaccess 中使用它 RewriteEngine On RewriteCond REQUEST FILENAME d RewriteCond REQUEST FILE
  • 在 unix 中操作字符串来创建目录

    我想将一个单词作为输入 并在 unix shell 中使用该单词的字母创建连续的目录 我尝试了 sed awk 和 Fold 命令 但没有获得任何有用的结果 有什么建议吗 例如 如果输入是hello 它应该创建h e l l o目录就像一个
  • 防止 tomcat 在部署时启动应用程序

    有什么方法可以告诉Tomcat不要自动启动我想要部署的应用程序吗 我想手动执行此操作 In CATALINA HOME conf server xml
  • 使用插值时添加换行符

    我有一些用于警报消息框的 html 使用插值 我可以重复使用相同的 html 来显示多个不同的警报消息 它看起来像这样 p myAlertMessage p 现在我想显示一条包含换行符的较长警报消息 但是 我似乎无法以任何会引入换行符的方式
  • 有没有一种简单的方法可以从 Kotlin 中的对象列表中获取数组?

    我希望能得到一个name列表中的数组MSetting 目前我用代码A来做 但是太复杂了 有没有简单的方法呢 Code A fun getName aList List
  • 如何安全地回显文字字符串“%I”?

    我怎样才能回显字符串 I以安全的方式 独立于是否echo命令行被放置在for I loop 例如 在命令提示符中 cmd gt gt gt rem echo is outside of for scope so this works gt
  • 为什么将模型上传到 HuggingFace 存储库的速度如此之慢?

    我有一个问题 我正在尝试将模型推送到 HuggingFace 存储库 问题是它说上传过去 16 小时 而这只是 pytorch model bin 文件 大约 850MB 我用的是LFS 我尝试手动将文件添加到存储库 这需要很长时间 我不愿
  • 在终端中根据括号或圆括号(仅限顶级)分割文本文件

    我有几个文本文件 utf 8 我想在 shell 脚本中处理它们 它们的格式并不完全相同 但如果我只能将它们分解成可食用的块 我就可以处理它 这可以用 C 或 python 编程 但我不喜欢 编辑 我用 C 编写了一个解决方案 看我自己的答
  • getCanonicalName 时抛出 ClassCircularityError

    异常堆栈 Exception in thread main java lang ClassCircularityError plugins agents Agent at java lang Class getDeclaringClass
  • 自定义工具快捷方式 Visual Studio

    有没有办法在 Visual Studio 中创建自定义工具的快捷方式 目前 我必须导航到解决方案中的工具 右键单击并运行自定义工具 如果我可以绑定快捷键或从工具栏运行该工具 那就太好了 有谁知道有什么方法可以做到这一点 我想你正在寻找这个
  • 错误消息是 (#12) bio 字段在 v2.8 及更高版本中已弃用

    我使用了 spring social facebook 的 2 0 3 RELEASE 版本和 Facebook 应用程序 api v2 8 我调用 Facebook 登录但返回了此消息 12 bio 字段在 v2 8 及更高版本中已弃用
  • Symfony / PHP - 存储单个值的最佳方式

    假设我有一个在 Symfony 3 2 Doctrine 上运行的应用程序 问题 存储会随着某些操作而改变的单个值的最佳方法是什么 第一个想法 我认为创建一个具有单个属性的实体将创建一个具有单个列的表 该列将具有单个值 更改某些操作 这不是
  • 用于拒绝请求的 NetflixOSS Zuul 过滤器

    我正在尝试在简单的 spring cloud Netflix Api 网关 反向代理 中使用 ZuulFilter 以便对自定义身份验证提供程序进行请求身份验证 通过 Rest 调用 过滤器应使用 401 拒绝未经授权的请求 并且不要将这些
  • 使用 JDBC 批量删除和插入

    我想知道是否可以使用批处理来执行参数化 DELETE 和 INSERT 语句 我知道如何插入多行 但是 我首先想做一个 DELETE 语句 这需要不同的参数 以下是我插入多个语句的方法 String query INSERT INTO TA
  • 如何将 Wicket 的 DownloadLink 与动态生成的文件一起使用?

    DownloadLink https ci apache org projects wicket apidocs 1 4 x org apache wicket markup html link DownloadLink html创建用于下