如何在与有条件呈现的内容相关联的页面加载时不初始化 bean
Posted
技术标签:
【中文标题】如何在与有条件呈现的内容相关联的页面加载时不初始化 bean【英文标题】:How to NOT initialize beans on page load associated with conditionally rendered content 【发布时间】:2015-05-02 09:31:41 【问题描述】:我有一个页面,其中包含由侧面菜单中的多个链接控制的有条件呈现的内容。所有这些内容都有一个默认呈现为假的数据表。一切正常,除了当页面加载时所有的 bean 都在执行并且所有的 bean 都在做昂贵的数据库工作。
我希望当用户单击侧边菜单时,将呈现相应的数据表,然后才会初始化关联的托管 bean。我怎样才能做到这一点?
【问题讨论】:
【参考方案1】:你基本上有两种选择:
不要使用 ajax 导航。相反,通过 GET 导航。另见How to navigate in JSF? How to make URL reflect current page (and not previous one)。
或者,不要有条件地呈现内容。相反,有条件地构建内容。另见How to ajax-refresh dynamic include content by navigation menu? (JSF SPA)
【讨论】:
【参考方案2】:我最近遇到了这样的问题。我决定使用相同的条件来决定渲染或不渲染这个或那个组件来决定初始化或不初始化它的支持变量。例如,您有一个带有代码的 JSF 页面:
<h:outputText rendered="#bean.isRendered()" value="#bean.text"/>
bean 如下:
@PostConstruct
public void init()
if(isRendered)
text = "Hello World";
【讨论】:
以上是关于如何在与有条件呈现的内容相关联的页面加载时不初始化 bean的主要内容,如果未能解决你的问题,请参考以下文章
如何推迟加载 UpdatePanel 内容,直到页面呈现后?