如何在与有条件呈现的内容关联的页面加载时不初始化 bean

How to NOT initialize beans on page load associated with conditionally rendered content

我有一个页面,其中有条件呈现的内容由侧边菜单中的多个链接控制。所有这些内容都有一个默认呈现为 false 的数据表。一切正常,除了当页面加载时所有 bean 都在执行并且所有 bean 都在做昂贵的数据库工作。

我希望当用户单击侧边菜单时,将呈现相应的数据表,然后才会初始化关联的托管 bean。我怎样才能做到这一点?

你基本上有两个选择:

  1. 不要按 ajax 导航。相反,通过 GET 导航。另见 How to navigate in JSF? How to make URL reflect current page (and not previous one).

  2. 或者,不要有条件地呈现内容。相反,有条件地构建内容。另见 How to ajax-refresh dynamic include content by navigation menu? (JSF SPA)

我最近遇到了这样的问题。我决定使用与我用来决定渲染或不渲染这个或那个组件来决定初始化或不初始化其支持变量的相同条件。例如,您有 JSF 页面,代码为:

<h:outputText rendered="#{bean.isRendered()}" value="#{bean.text}"/>

bean 如下:

@PostConstruct
public void init(){
     if(isRendered){
           text = "Hello World";
     }
}