21

那些的执行顺序是什么?

这是关于可能的f:event事件名称的问题:JSF 2 事件列表?

preRenderComponent
preRenderView
postAddToView
preValidate
postValidate

我想检查用户是否保存在会话 bean 中已登录,如果没有重定向到登录站点,这需要在视图参数转换阶段之前发生,因为使用的转换器取决于登录的用户。'preValidate' 似乎发生在转换之后,所以我需要一个更早的事件。

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

我也可以将 'checkLoggedIn()' 放在 'beanB' 中,但尝试使用单独的请求范围 bean 来进行检查,以便我可以轻松地重用它。

4

1 回答 1

36

那些的执行顺序是什么?

  • postAddToView在视图构建期间将组件添加到视图后立即运行(通常在恢复视图阶段,但也可以在呈现响应阶段,例如导航)。
  • preValidate在要验证组件之前运行(通常在验证阶段,但也可以在应用请求值阶段 if immediate="true")。
  • postValidate在组件被验证后立即运行(通常在验证阶段,但也可以在应用请求值阶段 if immediate="true")。
  • preRenderView在渲染响应阶段渲染视图之前运行。
  • preRenderComponent在渲染响应阶段渲染组件之前运行。

单击链接可查看 javadoc 介绍中的详细说明。


我想检查用户是否保存在会话 bean 中已登录,如果没有重定向到登录站点,这需要在视图参数转换阶段之前发生,因为使用的转换器取决于登录的用户。'preValidate' 似乎发生在转换之后,所以我需要一个更早的事件。

您应该为此使用简单的servlet 过滤器,而不是 JSF 事件。我之前发布了几个例子:

于 2012-12-22T15:57:10.553 回答