Нет другого способа достичь функциональных требований.A Filter
, в котором вы выполняете работу после , вызов chain.doFilter(request, response)
также должен работать, но это не дает вам доступа к контексту лиц (хотя многие специфические данные JSF также доступныстандартный сервлет API).
Что касается вашего слушателя фазы, если вам нужно, чтобы он прослушивал ответ рендеринга только , то добавьте
public PhaseId getPhaseId() {
return PhaseId.RENDER_RESPONSE;
}
не нужно проверять текущую фазу в методах слушателя.
public void afterPhase(PhaseEvent event) {
if (!FacesContext.getCurrentInstance().isPostback()) {
// ...
}
}
В следующем JSF 2.2, кстати, будет новый тег, который понимает isPostback()
, <f:viewAction>
:
<f:viewAction action="#{bean.action}" onPostback="false" />
Однако он запускается только во время фазы действия.