首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >每当Facelet页面加载时,在后台bean中运行代码块

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

Stack Overflow用户
提问于 2013-04-11 12:17:52
回答 1查看 913关注 0票数 1

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

代码语言:javascript
复制
<c:forEach var="p" items="#{statusBean.statusList}"
                        varStatus="loop">

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

在页面加载时,是否还有其他选择来运行代码块,而不仅仅是第一次?

EN

回答 1

Stack Overflow用户

发布于 2013-04-11 20:12:37

要做到这一点,有不同的方法。首先,您必须用“Facelets页面加载时”来定义您的意思。我想你是说在页面呈现之前。

PreRenderViewEvent

使用JSF2.x,最简单的方法是为PreRenderViewEvent创建一个系统事件侦听器。为此,您首先需要页面中的f:event标记,如下所示:

代码语言:javascript
复制
<f:event type="javax.faces.event.PreRenderViewEvent"
    listener="#{bean.preRenderView}"/>

PreRenderViewEvent的侦听器必须在视图根(f:view)上注册。因此,如果您不使用f:event,那么f:view必须是f:view的直接子级,或者是顶级的某个位置。使用模板时,f:event必须放在保证相同的ui:define中。

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

代码语言:javascript
复制
public void preRenderView(ComponentSystemEvent ev) {
    //Do something
}

@PreRenderView

如果您在MyFaces CODI中使用CDI,您可以简单地用@PreRenderView注释托管bean方法,并且在呈现页面之前会调用它。

视图操作

使用JSF2.2(尚未最终确定),您可以使用视图操作在生命周期的不同阶段调用方法。有关细节,请参阅我的关于JSF2.2视图操作的JSFlive帖子

您可以在我的PreRenderViewEvent中找到GitHub存储库的示例并查看操作

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15948587

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档