Как очистить буфер в начале JSF 2.0? - PullRequest
1 голос
/ 09 сентября 2011

Я использую JSF 2.0 и хочу заблаговременно очистить буфер (между головой и ответом), так как это один из лучших способов повышения производительности. В этой статье BalusC показывает, как это сделать на странице JSP (<% response.getWriter().flush(); %>), но я использую страницы формата xhtml. Кто-нибудь знает, как это сделать?

Спасибо!
Damian

Ответы [ 2 ]

3 голосов
/ 09 сентября 2011

Если вы используете <h:head> в JSF2, то вы можете в теории сделать это, явно сбрасывая основной выходной поток сервлета в методе encodeEnd() Renderer, связанном с компонентом ,

Существует два основных способа реализации пользовательского рендерера. Если вы хотите быть независимыми от реализации, то вы должны написать весь Renderer самостоятельно, что является частью работы (хотя для простого элемента HTML <head> это не так сложно). Вы также можете выбрать конкретную реализацию, чтобы получить простую пользовательскую реализацию Renderer. Предполагая, что вы используете Мохарру, вам просто нужно расширить com.sun.faces.renderkit.html_basic.HeadRenderer.

* 1014 Е.Г. *

package com.example;

import java.io.IOException;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import com.sun.faces.renderkit.html_basic.HeadRenderer;

public class FlushedHeadRenderer extends HeadRenderer {

    @Override
    public void encodeEnd(FacesContext context, UIComponent component) throws IOException {
        super.encodeEnd(context, component);
        context.getExternalContext().getResponseOutputWriter().flush(); // Forces flush.
    }

}

, который вы затем регистрируете следующим образом в faces-config.xml:

<render-kit>
    <renderer>
        <component-family>javax.faces.Output</component-family>
        <renderer-type>javax.faces.Head</renderer-type>
        <renderer-class>com.example.FlushedHeadRenderer</renderer-class>
    </renderer>
</render-kit>

Однако у этого подхода есть предостережения. JSF больше не имеет возможности создавать сеанс всякий раз, когда это необходимо, или обрабатывать любое исключение как страницу ошибки всякий раз, когда возникает исключение во время рендеринга представления. Я бы не рекомендовал этот подход для JSF .

1 голос
/ 26 апреля 2014

Если вы используете myFaces, в вашем файле web.xml вы можете установить контекстный параметр, как показано ниже:

<context-param>
    <param-name>org.apache.myfaces.EARLY_FLUSH_ENABLED</param-name>
    <param-value>true</param-value>
</context-param>  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...