Java 当我在托管bean的构造函数中调用来自其他bean的方法时

Java 当我在托管bean的构造函数中调用来自其他bean的方法时,java,jsf,jakarta-ee,managed-bean,Java,Jsf,Jakarta Ee,Managed Bean,当我在托管bean的构造函数中并试图从其他bean中找到其他方法时,我得到了java.lang.NullPointerException。是否有某种规范不允许托管bean这样做 @ManagedProperty(value="#{document}") private DisplayListController document; @EJB DocumentSBean sBean; public NewUserController() { document.list(); } 上

当我在托管bean的构造函数中并试图从其他bean中找到其他方法时,我得到了
java.lang.NullPointerException
。是否有某种规范不允许托管bean这样做

@ManagedProperty(value="#{document}")
private DisplayListController document;

@EJB
DocumentSBean sBean;

public NewUserController() {
    document.list();
} 
上面我只是做普通的豆子注射,没什么特别的
document
是一个
SessionScoped
托管bean,其方法
list()
只返回一个
String
NewUserController
是一个
RequestScoped
托管bean。

您应该查看一个可以找到的示例

当您尝试访问属性时,未设置属性。您需要等待它们被设置。Bean管理通常包括:

  • 创建bean
  • 设置属性
  • 您试图使用尚未设置的属性,从而导致NPE

    因此,您的代码可以更改为:

    public NewUserController() { }
    
    @PostConstruct
    public void init() {
        document.list();
    }
    

    DisplayListController可能应该配置为使用list方法上的@PostConstruct注释调用自己的init方法