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

ice*_*pax 3 testing jsf

我有一个支持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;
    }
Run Code Online (Sandbox Code Playgroud)

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

Bal*_*usC 10

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

大致如此:

  1. Bean构建完毕.
  2. 托管属性已设置.
  3. @PostConstruct被调用.
  4. Bean引入了JSF生命周期.

您的问题可能是该值已被其他内容覆盖.只需运行调试器或让专家审查您的代码即可.


McD*_*ell 7

JSF 1.2规范明确指出:

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

(规格中的更多细节.)