Порядок выполнения jsf для f: событий

Каков порядок выполнения этих действий?

Вот вопрос о возможных именах событий f:event: Список событий JSF 2?

preRenderComponent
preRenderView
postAddToView
preValidate
postValidate

Я хочу проверить, сохранен ли пользователь в сеансе bean, и если он не перенаправляется на сайт входа в систему, который должен произойти до фазы преобразования view-param, поскольку используемый конвертер зависит от зарегистрированного пользователя, "preValidate", похоже, происходит после преобразования, поэтому мне нужно более раннее событие.

<f:event type="preRenderView" listener="#{beanA.checkLoggedIn()}"/>
<f:viewParam name="param" value="#{beanB.param}" converter="#{beanB.converter}" required="true"/>

Я мог бы поставить 'checkLoggedIn()' в 'beanB' тоже, но попытался использовать отдельный запрос scoped bean только для проверки, чтобы я мог легко использовать его.

Ответы

Ответ 1

Каков порядок выполнения этих действий?

  • postAddToView запускается сразу после добавления компонента для просмотра во время времени сборки (что обычно происходит во время фазы восстановления, но также может во время фазы ответа на визуализацию, например, навигация).
  • preValidate запускается прямо перед тем, как компонент должен быть проверен (что обычно происходит во время фазы проверки, но также может быть фазой запроса запроса если immediate="true").
  • postValidate запускается сразу после проверки компонента (что обычно происходит во время фазы проверки, но также может применяться фаза запроса, если immediate="true").
  • preRenderView выполняется прямо перед визуализацией представления во время фазы ответа рендеринга.
  • preRenderComponent выполняется прямо перед отображением компонента во время фазы ответа рендеринга.

Нажмите ссылку, чтобы увидеть подробное описание в представлении javadoc.


Я хочу проверить, сохранен ли пользователь в сеансе bean, и если он не перенаправляется на сайт входа в систему, который должен произойти до фазы преобразования view-param, поскольку используемый конвертер зависит от зарегистрированного пользователя, "preValidate", похоже, происходит после преобразования, поэтому мне нужно более раннее событие.

Для этого вам следует использовать простой фильтр сервлетов, а не событие JSF. Я уже опубликовал несколько примеров: