【问题标题】:JSF 1.2 - Does PostConstruct execute before or after gettersJSF 1.2 - PostConstruct 在 getter 之前还是之后执行
【发布时间】:2009-11-26 16:59:06
【问题描述】:

我有这个用于支持 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 这样的数字。

【问题讨论】:

    标签: jsf testing


    【解决方案1】:

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

    大致如此:

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

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

    【讨论】:

      【解决方案2】:

      JSF 1.2 spec 明确表示(第 11 页,第 119 项前言):

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

      (规范中的更多详细信息。)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-26
        • 2010-11-22
        • 1970-01-01
        • 1970-01-01
        • 2017-08-27
        • 2013-05-16
        相关资源
        最近更新 更多