【问题标题】:How Can I put information in a outputstream from tapestry5?如何将信息放入 Tapestry5 的输出流中?
【发布时间】:2008-11-13 21:38:36
【问题描述】:

如何将信息放入 Tapestry5 的输出流中?

当用户进入时我需要一个页面打开一个对话框以保存或打开带有输出流信息的文件。

我写下一段代码:

公共类索引{

@Inject
private RequestGlobals requestGlobals;

@OnEvent("activate")
public void onActivate() {
    try {
        HttpServletResponse response = requestGlobals.getHTTPServletResponse();
        response.setContentType("text/txt");
        PrintWriter out = response.getWriter();
        out.println("hellooooooo");
        out.flush();
    } catch (IOException ex) {
        Logger.getLogger(Index.class.getName()).log(Level.SEVERE, null, ex);
    }
}

}

我希望结果只是“helloooooooo”,而是(“helloooooooo”+我的html原始页面)

【问题讨论】:

    标签: java servlets tapestry


    【解决方案1】:

    您的方法的返回类型应为 StreamResponse。你返回一个 StreamResponse 接口的实现,它只是返回你想要的数据和你想要的内容类型。

    在这里查看:

    http://tapestry.apache.org/tapestry5/apidocs/

    更多信息在这里:

    http://tapestry.formos.com/nightly/tapestry5/tapestry-core/guide/pagenav.html

    【讨论】:

      【解决方案2】:

      如果您正在处理大型响应流,使用StreamResponse 可能会有些不方便且效率低下(因为您必须返回InputStream)。最好直接回复OutputStream

      幸运的是,在 Tapestry Wiki 中有一个页面可以解决这个问题:Tapestry5: How To Create A Component Event Result Processor

      【讨论】:

      • 如果您想避免在将文件发送到客户端之前将其写入服务器端,则此解决方案是最佳选择。但是 Tapestry 示例的解决方案需要修复:OutputStream 的关闭必须在 finally 块中完成。我们也可以使用IOUtils.closeQuietly(out);(来自apache)关闭OutputStream,而不需要try...catch。
      • finally 块中完成。实际上,它做了两次:在try 块和finally 块中(只需 finally 块就足够了)。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-16
      • 1970-01-01
      • 2011-08-12
      相关资源
      最近更新 更多