JSF 1.2 - PostConstruct是在getter之前还是之后执行

时间:2009-11-26 16:59:07

标签: jsf testing

我有一个支持bean的代码:

@PostConstruct
 public void refreshData()
 {
  rows  = (int) dd.getRows();
  pages = dd.getPages();
  getRender();
 }

// action
 public void getCount(String sql, Object... values)
  throws Exception
 {
  dd.getCount(sql, values);
  rows  = (int) dd.getRows();
  pages = dd.getPages();
 }

 // getter methods
    public boolean getRender() {
        System.out.println("pages: "+pages);
     boolean rendered = pages > 0? true: false;
     return rendered;
    } 

 public int getRows() {
  return rows;
 }
    public int getPages() {       
     return pages;
    }

带有 @PostConstruct 指令的 refreshData()方法是否在所有getter方法之后或之前执行?我问这个因为我注意到 getRender()方法总是返回零,即使 getPages()返回一个像10这样的数字。

2 个答案:

答案 0 :(得分:10)

我不知道你在“所有的getter方法之前”是什么意思。在构造bean 所有托管属性(在@PostConstruct中定义的bean属性)之后,至少会立即调用faces-config.xml

粗略地说:

  1. Bean已构建。
  2. 已设置托管属性。
  3. 调用@PostConstruct。
  4. Bean引入了JSF生命周期。
  5. 您的问题可能是该值已被其他内容覆盖。只需运行调试器或让专家审核您的代码。

答案 1 :(得分:7)

JSF 1.2 spec具体说明:

  

声明在请求,会话或应用程序中的托管bean的方法   范围,用@PostConstruct注释,之后必须由JSF实现调用   执行资源注入(如果有)但在将bean放入范围之前。

(规范中的更多细节)