【问题标题】:Writing plain HTML in a JSF based web application在基于 JSF 的 Web 应用程序中编写纯 HTML
【发布时间】:2015-02-16 09:19:50
【问题描述】:

我在一个 JSF 应用程序中有这个用例。

假设在一个 JSF Web 应用程序中,我有一个按钮,它调用一个返回完整 HTML 响应的外部服务,那么如何向我的用户浏览器显示该 HTML 响应?

事件的顺序是这样的。

  1. 在用户浏览器中,显示了我的应用程序。有一个按钮可供用户点击。
  2. 单击该按钮将调用外部服务。外部服务将返回有关特定 HTML 标记的信息。 HTML 包含 head/body 和 javascript。目前,该服务可以通过 REST 服务或普通数据库调用来实现
  3. 如何在我的用户浏览器中显示该 HTML 标记?

这是否可以在 JSF Web 应用程序中编写非 JSF 输出?

补充一下,我认为我的问题是如何在我的支持 bean 中编写 HTML 并将其写回用户浏览器。

【问题讨论】:

  • 听起来像一个常规的客户端 javascript ajax 调用,它从某个外部源获取数据并将其附加到页面的正文中?我不知道为什么服务器需要在这里参与。
  • 这是第 3 方网站,因此我们无法控制他们将发送哪些信息。返回的 HTML 包含自定义 javascript 代码,因此我只需向用户显示生成的 html 标记。
  • @MarkEstrada,你为什么不把那个 html 放到一个对话框中,并通过他的按钮点击显示给你的用户
  • 在 JSF 应用程序(或任何其他应用程序)中,当响应呈现给客户端/浏览器时,不再有与​​ JSF 相关的工件。浏览器完全不知道 JSF。因此,JSF 返回的内容与服务返回的内容不再不同。为什么不能以 REST 等服务返回的纯 HTML 形式显示响应?
  • @Tiny 我实际上不知道如何在 JSF 中执行此操作。你能详细说明一下吗?谢谢

标签: jsf html-rendering


【解决方案1】:

只需将其直接写入HTTP response body,然后您指示 JSF 将response is manually completed。原理和How to provide a file download from a JSF backing bean?没有太大区别,只是需要将content disposition设置为inline(反正已经是默认了)。

public void writeHtmlResponse() throws IOException {
    FacesContext fc = FacesContext.getCurrentInstance();
    ExternalContext ec = fc.getExternalContext();

    ec.setResponseContentType("text/html;charset=UTF-8");
    ec.setResponseCharacterEncoding("UTF-8");
    ec.getResponseOutputStream().write(html.getBytes("UTF-8"));

    fc.responseComplete(); // Important! Otherwise JSF will attempt to render the response which obviously will fail since it's already written with a file and closed.
}

【讨论】:

  • 即使我的 JSF 应用程序是旧版 1.X 应用程序,这也能工作吗?
  • 以后请在问题中明确提及版本。如今,没有人会期望您正在开发 EOL 版本。 JSF 1.x 提示在“如何在 JSF 支持 bean 中流式传输文件下载?”后面的链接中给出。
猜你喜欢
  • 2010-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-01
  • 2014-01-19
  • 2011-03-31
相关资源
最近更新 更多