Bes*_*ces 90 jsf postconstruct jsf-2 prerenderview viewaction
什么时候应该使用f:viewActionor preRenderView事件来初始化页面的数据而不是使用@PostConstruct注释?基于支持bean的范围类型使用一个或另一个的基本原理例如,如果支持bean是@RequestScoped,那么在呈现视图之前选择使用f:viewAction或preRenderView覆盖@PostConstruct初始化支持bean是不相关的,因为两者会结果是一样的吗?
f:viewAction或preRenderView
<f:metadata>
<f:viewAction action="#{myBean.initialize}" />
</f:metadata>
Run Code Online (Sandbox Code Playgroud)
<f:metadata>
<f:event type="preRenderView" listener="#{myBean.initialize}"/>
</f:metadata>
Run Code Online (Sandbox Code Playgroud)
要么
@PostConstruct
public class MyBean
{
@PostConstruct
public void initialize()
{
}
}
Run Code Online (Sandbox Code Playgroud)
Bal*_*usC 114
应该何时使用f:viewAction或preRenderView事件使用@PostConstruct注释初始化页面的数据?
<f:viewAction>在呈现HTML之前,使用何时执行方法.如果要基于<f:viewParam>在更新模型值阶段期间设置的模型值执行操作,这将特别有用.也就是说,它们在@PostConstruct运行时不可用.在JSF 2.0/2.1中,此标记不存在,您必须使用该preRenderView变通方法.
如果支持bean是@RequestScoped,那么它们是否有效地执行完全相同的操作?(那么这取决于开发人员的选择?(@ PostConstruct看起来更"干净").
不,他们肯定没有有效地做同样的事情.该@PostConstruct被intented执行动作直接 bean的建设和设置的所有注入的依赖性和管理特性,如后@EJB,@Inject,@ManagedProperty等即,注入的依赖是不具备的bean的构造函数中.因此,当bean是视图,会话或应用程序作用域时,每个视图,会话或应用程序只运行一次.在<f:viewAction>默认情况下,仅上调用初始GET请求,但可以通过onPostback="true"属性被配置在回发请求被调用为好.preRenderView在每个HTTP请求上调用该事件(是的,这也包括ajax请求!).
总结,使用@PostConstruct,如果你想在其上设置由依赖注入与管理的酒店执行操作@EJB,@Inject,@ManagedProperty,等豆腐的建设过程中.使用<f:viewAction>,如果你也想执行由设置属性的行为<f:viewParam>.如果您仍然使用JSF 2.0/2.1,请使用preRenderView而不是<f:viewAction>.如有必要,您可以添加检查FacesContext#isPostback()以preRenderView仅对初始请求执行操作.
| 归档时间: |
|
| 查看次数: |
67463 次 |
| 最近记录: |