每当加载Facelet页面时,在后台bean中运行一个代码块



我正在使用JSF建立一个网站。我想在每次加载Facelet页面时运行一段代码,我需要使用会话作用域支持bean。我尝试使用后台bean的构造函数来运行代码块,但它只运行第一次,我使用以下代码

<c:forEach var="p" items="#{statusBean.statusList}"
                        varStatus="loop">

由于statusBean是会话作用域,它在加载页面时第一次运行构造函数。

当页面加载时,是否有其他方法可以运行代码块,而不仅仅是第一次?

有不同的方法来实现这一点。首先,你必须定义"当Facelets页面加载时"是什么意思。我想你的意思是在页面呈现之前。

PreRenderViewEvent

使用JSF 2。最简单的方法是为PreRenderViewEvent设置系统事件侦听器。为此,您首先需要在页面中添加f:event标签,如下所示:

<f:event type="javax.faces.event.PreRenderViewEvent"
    listener="#{bean.preRenderView}"/>

PreRenderViewEvent的监听器必须在视图根(f:view)上注册。因此,如果不使用f:view, f:event必须是f:view的直接子级或某个顶级级。对于模板,f:event必须放在ui:define中,以保证相同的效果。

在呈现视图之前调用listener属性中引用的侦听器方法。该方法可能如下所示:

public void preRenderView(ComponentSystemEvent ev) {
    //Do something
}

@PreRenderView

如果您使用CDI与MyFaces CODI,您可以简单地用@PreRenderView注释一个托管bean方法,它将在页面呈现之前被调用。

视图操作

在JSF 2.2(尚未最终确定)中,您可以在生命周期的不同阶段使用视图操作来调用方法。有关详细信息,请参阅我关于JSF 2.2视图操作的JSFlive帖子。

您可以在我的GitHub存储库

中找到PreRenderViewEvent和查看动作的示例。

相关内容

  • 没有找到相关文章

最新更新