如何解决JSF:如何在UI Bean中仅运行一次方法?
我已经接管了JSF应用程序,并且原始开发人员现在无法提问。我目前正在通过示例学习,我不知道此应用程序中的示例是好是坏。
在此JSF应用程序中,我有一个包含在多个位置的片段,并且具有自己的UI Bean。 UI bean是请求范围的。它通过调用getFacesContext().getViewRoot().getViewId();
知道片段包含在哪个位置。到目前为止,一切都很好。
现在,我需要在此bean中进行一些初始化,具体取决于当前的viewID。我不能将其放在构造函数中,因为它还取决于必须设置所有托管属性。
初始化必须至少运行一次,并且首先运行,因为许多其他吸气剂取决于结果,并且最多运行一次因为这是一项昂贵的任务(从数据库等获取东西)。
那我怎么最好地触发要完全调用的初始化方法?
并且当JSF有多次调用所有东西的坏习惯时,如何防止它再次运行?
原始开发人员将他的初始化内容放入伪getter中,并通过添加<h:panelGroup rendered="#{myBean.doSomething}"/>
对其进行调用,但这根本不满足一次的要求。
我尝试过the preRenderView listener,但也多次被调用。也许是因为该应用程序使用了一些AJAX,但随后仍然很奇怪,因为该部分没有从外部重新渲染。
更多背景信息:该应用程序非常老,仍然使用属性faces-config.xml
中所有bean的XML配置,而不是注释。它使用myfaces-impl-2.1.18.jar
,所以我认为是JSF 2.1
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。