jsf - 具有 postconstruct 方法的 ApplicationScoped Bean

标签 jsf jakarta-ee ejb managed-bean postconstruct

我有一个应用程序范围的 bean 来保存数据库中的信息。实例化后,它应该获取数据,因此我用 @PostConstruct 注释了该方法。一旦我请求引用该 bean 的 jsf 页面,服务器日志就会爆炸!我认为它以某种方式递归,我得到的唯一堆栈跟踪是在repBean.acceptVisitor(Visitor);期间发生系统异常。方法。然后服务器日志会变得好几 GB 大,我必须手动删除它以获得可用磁盘空间。如果我删除 @PostConstruct 注释,则不会有异常(exception)。从另一个 bean 调用 update() 方法后,repositoryContent 变量会正确更新并包含信息。唯一的问题是我的 jsf 页面由于某种奇怪的原因没有显示内容。

@ManagedBean(eager=true)
@ApplicationScoped
public class IndexBean implements Serializable {

    private ArrayList<ViewFolder> repositoryContent;

    @EJB
    RepositoryService repBean;

    @PostConstruct
    public void update() {
       RepositoryVisitor Visitor = new RepositoryVisitor();
       repBean.acceptVisitor(Visitor);
       repositoryContent = Visitor.getList();
   }
}

最佳答案

这不是正常行为。

以下行之一

   RepositoryVisitor Visitor = new RepositoryVisitor();
   repBean.acceptVisitor(Visitor);
   repositoryContent = Visitor.getList();

间接评估 EL 表达式#{indexBean},这又会导致再次构造 bean,因为它尚未投入使用。仅当 @PostConstruct 完成时,它才会投入使用(因此可作为具体的 #{indexBean})。这一切都会导致无限循环。

您可能需要进行一些重构,或者将应用程序范围的 bean 实例本身传递给方法调用,以便可以直接使用它,而不是由 EL 表达式引用。

关于jsf - 具有 postconstruct 方法的 ApplicationScoped Bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13057151/

相关文章:

java - HQL 查询抛出 ExecutionException

java - 多次构造 Eager ApplicationScoped 托管 beans

jsf - 如何更改 <p :calendar> language

jsf - 将 faces-config.xml 从 2.2 更改为 2.3 会导致 javax.el.PropertyNotFoundException : Target Unreachable, 标识符 'bean' 解析为 null

java - 基于 JAX-RPC 的 Web 服务端点(在 EJB 上下文中)意味着什么?

javax包包含两个不同项目中的不同包

jsf - JSF返回带有纯/原始XHTML/XML/EL源的空白/未解析页面,而不是呈现的HTML输出

java - 验证 c3p0 使用 JPA 运行

java - JPA 中的@Any 等价于什么?

jakarta-ee - 在由生产者方法创建的 bean 中,cdi 注入(inject)的依赖项解析为 null