2015-06-22 2 views
0

Я обновляю JSF с версии 1.2 до 2.2.sendRedirect в JSF 2.2

У меня есть простой ответ response.sendRedirect() в моем бэк-компоненте. С JSF2.2 он начал выдавать «java.lang.IllegalStateException: не может изменить размер буфера после того, как данные были написаны при исключении org.apache.catalina.connecto».

После добавления «FacesContext.getCurrentInstance(). ResponseComplete();», он сработал!

Может ли кто-нибудь помочь мне в понимании того, как реализация была обновлена ​​в JSF2.2, что перенаправление не работает без объяснения того, что ответ завершен?

Спасибо!

ответ

2

Предполагается использовать ExternalContext#redirect() для работы.

public void submit() throws IOException { 
    // ... 

    ExternalContext ec = FacesContext.getCurrentInstance().getExternalContext(); 
    ec.redirect(ec.getRequestContextPath() + "/otherpage.jsf"); 
} 

Это всегда имело место с самого начала, также в JSF 1.x. Он будет под крышкой автоматически вызывать FacesContext#responseComplete() после выполнения HttpServletResponse#sendRedirect(). responseComplete() в основном проинструктирует JSF, что ответ уже завершен вручную, и что JSF в принципе не нуждается в продолжении визуализации фазы ответа (то есть написании результата навигации в ответ).

Кроме того, любая попытка захвата и опускания необработанного API из-под крышек JSF следует воспринимать как подсказку, чтобы подумать дважды, если еще не существует того же метода JSF-ish. В JSF 2.x есть дополнительный новый способ выполнить переадресацию: добавить faces-redirect=true параметр запроса к (неявному) навигации результату:

public String submit() { 
    // ... 

    return "otherpage?faces-redirect=true"; 
} 

Что касается незаконного государственного исключения вы столкнулись, JSF 2.2 просто откладывает установки ответа заголовки до такой степени, когда на самом деле нужно отдать ответ. Будет слишком поздно, если ответ уже сделан.

-2

java.lang.IllegalStateException:. Невозможно изменить размер буфера после того, как данные были записаны в org.apache.catalina.connecto»исключение

Это может произойти из-за вас был установлен размер буфера ответа вручную для уменьшения перераспределения памяти на время рендеринга, но ваша страница имеет больше размера, чем размер буфера

Например

<context-param>  
    <param-name> javax.faces.FACELETS_BUFFER_SIZE </param-name> 
    <param-value> 55555 </param-value> 
</context-param> 
Смежные вопросы