JSF + backing bean:如何检测应用程序何时首次加载

时间:2010-07-05 17:50:37

标签: java jsf

我该如何做这样的事情 Inside JSF file, list.xhtml

 <p:dataTable value="#{document.drawings}" var="item">
     //document is the backing bean that has method getDrawings() that return list of item
 </p:dataTable>  

Inside my backing bean, document.java

 List<Drawing> drawings;
 ...
 public void List<SelectItem> getDrawings(){
      if(application first load){
           return sessionBean.getAllDrawings();
      }else{
           return drawings;
      }
 }

所以逻辑是如果应用程序首先加载,然后通过访问getAllDrawings()内的方法session bean从数据源加载每个东西,否则返回drawings这是绘图列表已被一些ajax方法操纵。

2 个答案:

答案 0 :(得分:2)

将其声明为应用程序作用域bean,并将所需的应用程序启动初始化逻辑放在其构造函数中。如有必要,您可以在任何其他请求/会话范围的bean中将其注入<managed-property>(或者如果您已经在JSF 2.0上,@ManagedProperty)。

应用程序范围的bean只创建一次,并在webapplication的生命周期内在所有会话/请求之间共享。

答案 1 :(得分:1)

你可以有一个

@PostConstruct
public void init() { 
      drawings = loadDrawings();
}

但你也可以拥有所谓的“延迟加载”。即:

public void List<SelectItem> getDrawings(){
      if(drawings == null) {
           drawings = sessionBean.getAllDrawings();
      }
      return drawings;
}