JSF 2 - ResponseWriter.flush()的意义

时间:2011-10-31 08:42:33

标签: jsf servlets jsf-2 flush

我正在做一些测试,我意识到编写器没有自动刷新,即在所有组件都被渲染之前我在客户端看不到任何响应?

我也尝试手动刷新响应编写器,但它没有任何区别。有没有办法允许手动刷新,以便更早地为客户端提供响应?

由于

1 个答案:

答案 0 :(得分:3)

也许您在错误的时刻使用了错误的编写器或调用了flush,或者误解了结果(即行为是浏览器/ CSS / JS特定的)。以下测试用例适用于Mojarra 2.1.3。

<h:outputText value="#{bean.text}" escape="false" />
<h:outputText value="#{bean.text}" escape="false" />
<h:outputText value="#{bean.text}" escape="false" />
<h:outputText value="#{bean.text}" escape="false" />
<h:outputText value="#{bean.text}" escape="false" />
<h:outputText value="#{bean.text}" escape="false" />
<h:outputText value="#{bean.text}" escape="false" />
<h:outputText value="#{bean.text}" escape="false" />
<h:outputText value="#{bean.text}" escape="false" />
<h:outputText value="#{bean.text}" escape="false" />

public String getText() throws Exception {
    FacesContext.getCurrentInstance().getExternalContext().responseFlushBuffer();
    Thread.sleep(250);
    return "<br />a line of text";
}

您可以在浏览器中看到它们一行一行而不是一次性显示。

请注意,我们并不建议采用上述方法。您可以使用上下文参数javax.faces.FACELETS_BUFFER_SIZE微调响应缓冲区大小。

<context-param>
    <!-- Flush every 128 bytes (default is 1024) -->
    <param-name>javax.faces.FACELETS_BUFFER_SIZE</param-name>
    <param-value>128</param-value>
</context-param>