2011-11-27 46 views
0

请求作用域bean从所有其他许多请求bean &收集数据业务逻辑。这个bean通过页面中的EL表达式使用,但是在这个请求scoped bean可以在页面中使用之前,它需要使用收集的数据建立一个目录(这是在所有收集完成之后但在bean属性可能在页面中使用)。执行bean的方法,然后可以在JSF页面中使用

如何在所有收集之后但在通过页面中的EL表达式使用而不使用<f:event>之前执行此bean中目录的构建?我只需要构建一次。

@ManagedBean(name="namesDirectory") 
@RequestScoped 
public class NamesDirectory { 

    public void addForPersonNameRetrieval(Integer id) { // this is used to collect the data in bean 
      peopleNamesMap.put(id,null); 
      ....... 
    } 

    public void buildDirectory(){ // used, when all collection is over, to build the diirectory  
      ....... 
    } 

    public String getPersonName(Integer id) { // used in the JSF page through EL expressions 
     name = peopleNamesMap.get(id); 
    } 

} 

这里buildDirectory()需要在所有集合的末尾但在JSF页面

+0

没有比@Ud​​o Held建议只建立一次更好的解决方案吗? –

+0

下面的模式只会导致一次重建。 –

+0

是的Udo,我得到了:)&+1 - 你的答案!然而,我想知道是否有解决方案可能通过某种事件监听器,我不知道阶段监听器,但从他们的名字思考,我想知道,如果他们是有意为这种目的..否则你的解决方案是完美的。 –

回答

2

你有几种选择使用getPersonName()之前执行。您可以在每次插入之后或每次检索之前重建目录,但这可能会导致不必要的重建。需要和调用时你只能重建目录:

  • 添加标记requiresRebuild,它默认为true
  • 将其设置为trueaddForPersonaNameRetrieval
  • 将其设置为falsebuildDirectory
  • 请致电buildDirectorygetPersonName如果重建是必要的。
相关问题