JSF Beans - 找出哪个bean触发了当前bean的初始化

时间:2012-03-15 15:03:04

标签: jsf jsf-2

假设我有一个带有@PostConstruct方法的JSF bean。 我想知道哪个实体引用了当前bean并导致其初始化。

@PostConstruct
public void init() {
  logger.info(... Who initialized me? ...);
}

1 个答案:

答案 0 :(得分:3)

此信息在JSF上下文中不可用。如果您正在使用Mojarra,则需要运行调试器并在ManagedBeanBuilder#bake()方法上设置断点。

或者,如果您在运行时期间因某些非显而易见的原因需要此信息,那么您需要让调用者将自己设置在引用该bean的@ManagedProperty的setter中。

@ManagedBean
@RequestScoped
public class Parent {

    @ManagedProperty("#{child}")
    private Child child;

    public void setChild(Child child) {
        this.child = child;
        this.child.setParent(this);
    }

    // ...
}

然后您可以使用setParent()方法收集此信息。

public void setParent(Object parent) {
    logger.info(parent + " has initialized me");
}