- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
什么时候应该使用 f:viewAction
或 preRenderView
事件来初始化页面数据,而不是使用 @PostConstruct
注释?是否根据支持 bean 的范围类型使用其中一种或另一种的基本原理,例如如果支持 bean 是 @RequestScoped,那么可以选择使用 f:viewAction
或 preRenderView
而不是 @PostConstruct
在渲染 View 之前初始化支持 bean 是不相关的,因为两者会产生相同的效果?
f:viewAction 或 preRenderView
<f:metadata>
<f:viewAction action="#{myBean.initialize}" />
</f:metadata>
<f:metadata>
<f:event type="preRenderView" listener="#{myBean.initialize}"/>
</f:metadata>
或
@PostConstruct
public class MyBean
{
@PostConstruct
public void initialize()
{
}
}
最佳答案
When should one use the f:viewAction or preRenderView event to initialize data for a page verses using the @PostConstruct annotation?
使用<f:viewAction>
当你想在 HTML 渲染之前执行一个方法时。如果您想根据 <f:viewParam>
设置的模型值执行操作,这特别有用。在更新模型值阶段。也就是说,它们目前不可用 @PostConstruct
运行。在 JSF 2.0/2.1 中,此标记不存在,您必须使用 preRenderView
解决方法。
If the backing bean is @RequestScoped, do they effectively do the exact same thing? (and so then it is up to developer choice? (@PostConstruct seems "cleaner").
不,他们绝对不会有效地做同样的事情。 @PostConstruct
旨在在 bean 构建并设置所有注入(inject)的依赖项和托管属性(例如 @EJB
)之后直接执行操作, @Inject
, @ManagedProperty
等等。也就是说,注入(inject)的依赖项在 bean 的构造函数中不可用。因此,当 bean 是 View 、 session 或应用程序范围时,每个 View 、 session 或应用程序仅运行一次。 <f:viewAction>
默认情况下仅在初始 GET 请求时调用,但可以通过 onPostback="true"
调用属性也可以配置为在回发请求时调用。 preRenderView
每个 HTTP 请求都会调用事件(是的,这也包括 ajax 请求!)。
总结一下,使用@PostConstruct
如果您想对 @EJB
设置的注入(inject)依赖项和托管属性执行操作, @Inject
, @ManagedProperty
等在bean的构建过程中。使用<f:viewAction>
如果您还想对 <f:viewParam>
设置的属性执行操作。如果您仍在使用 JSF 2.0/2.1,请使用 preRenderView
而不是<f:viewAction>
。如有必要,您可以添加对 FacesContext#isPostback()
的检查执行preRenderView
仅根据初始请求采取行动。
关于jsf - 何时使用 f :viewAction/preRenderView versus PostConstruct?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9844526/
我有一个带有“显示更多结果”按钮的搜索结果页面。支持 bean 是 session 范围的,我们使用 preRenderView 在支持 bean 中执行搜索方法: “显示更多结果”按钮的定义如下:
我对 f:event type="preRenderView" 的执行顺序和次数有疑问. 在我在这里的搜索过程中,我在 this 中找到了 BalusC 的常规答案。和 this与我的问题相关的帖子
我的一个页面/bean 有它的 preRenderView事件在第一页加载时触发两次,然后 2 + n每次回发的次数,其中 n是已发生的回发数(包括当前回发数)。 在这里阅读了一些其他帖子后,我搬家了
我从 What can , and be used for? 开始 我有一个预渲染 View 事件监听器: 它调用以下方法: public String performWeakLog
与使用 viewAction 相比,什么时候应该使用 preRenderView 事件来初始化页面的数据?它们在使用上是否相同并且它们具有相同的效果? preRenderView 事件 或者
我的 Mojarra 2.1.6 Web 应用程序有问题,我正在使用 @ViewScoped 开发它托管 bean,每个 bean 都附加到一个 xhtml 页面。此页面正在接收一些 View 参数,
有没有办法用 ajax 更新 preRenderView 组件? 一些例子: // some code here
我有以下片段: Simple JSF Facelets page Hello, Place your content here 当我打开页面时,Workf
什么时候应该使用 f:viewAction 或 preRenderView 事件来初始化页面数据,而不是使用 @PostConstruct 注释?是否根据支持 bean 的范围类型使用其中一种或另一种
我正在使用 f:metadata 元素中的预渲染 View 事件从另一个页面调用页面。 如果我使用 导航到页面它工作并调用监听器方法。 但是,如果我使用属于调用页面的托管 bean 的操作方法的结果
我正在用 jsf 2.0 做一个页面,我想做这样的事情: ....(Some code).... #{var.something} 方法 initPage(id)
进行回发时是否可以“禁用”触发此操作? 最佳答案 是不可能的。需要手动查看 FacesContext#isPostback() 在监听器方法内。 public void init()
我的 jsf xhtml 页面中有以下内容: 我需要在 preRenderView 执行后显示模态对话框。而且
我正在尝试使用动态验证组 然而,#{bean.validationGroup} 总是在 之前被调用 这是 Myfaces 中的错误吗?我需要在 prerenderview 之后
Mojarra-2.1.3 按照 Glassfish3.1.1(与 Netbeans7.1 一起分发) 我有一个 @SessionScoped 支持 bean 跟踪器,带有一个监听器 void res
我在 处遇到了一些麻烦导致我的所有按钮(默认类型,而不是 type="button"> 调用相同的 bean 方法,特别是 decryptionBean.readAllBoards 。以下是我认为代
我正在尝试使用 检查每个 View 的身份验证 标签。 该机制有效,但外观已损坏,似乎缺少一些 CSS。当我取消选中时,我的页面会正常显示。 这是我的一个观点,其中检查身份验证: ...
我正在尝试开发一项服务。 重点是我的 index.xhtml 应该从 HTTP 请求中获取参数(POST 和 GET)和 cookie。 我尝试与 结合使用和 像这样: deCon
所以我们有一个 f:event: 在初始页面加载(渲染)时根据需要触发。 然而,这个 preRenderView 事件也由 ajax 部分页面渲染触发,它重新渲染一个带有 i
我是一名优秀的程序员,十分优秀!