Ответ 1
Перенаправление в @PostConstruct
может быть слишком запоздалым, если ответ уже сделан. То есть когда первые несколько байтов ответа уже отправлены клиенту. Это точка невозврата. Это может быть в вашем случае, когда базовый bean ссылается (и таким образом сконструирован) впервые относительно поздно в представлении, возможно, примерно на полпути или в конце.
Вы можете решить эту проблему одним из следующих способов:
-
Ссылка на bean в первый раз как можно раньше в представлении.
-
Используйте
<f:event type="preRenderView">
вместо@PostConstruct
. Это вызовет метод непосредственно перед началом отклика рендера (таким образом, прежде чем какой-либо бит будет отправлен на ответ). Или, если вы уже используете JSF 2.2, используйте<f:viewAction>
. Дополнительным преимуществом является то, что<f:viewAction>
может возвращать результат действия для навигации, напримерreturn bolagsSok_company?faces-redirect=true"
, без необходимости возиться сExternalContext#redirect()
. -
Увеличьте размер буфера Facelets по умолчанию
javax.faces.FACELETS_BUFFER_SIZE
в параметреweb.xml
до размера самого большого ответа HTML.