JSF 1.2-PostConstruct是否在吸气剂之前或之后执行

问题描述 投票:3回答:2

我有用于备用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
2个回答
10
投票

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

因此大致:

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

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


7
投票

[JSF 1.2 spec特别说(第11页,第119条前言):

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

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

© www.soinside.com 2019 - 2024. All rights reserved.