多次构造的 Eager ApplicationScoped 托管 bean

2023-11-23

我有一堆eager ApplicationScoped托管豆。其中一些是通过注射到其他体内的ManagedProperty注解,形成依赖树。每个依赖 bean 在构建后都会操纵其父代。

然而,似乎每次注入都会创建一个新实例,从而撤销之前的操作。据我了解,一个ApplicationScopedbean 应该只创建一次。我是否误解了或者为什么会发生这种情况?是因为他们心急吗?

这是一个例子:

ParentBean.java

package example;

import javax.annotation.PostConstruct;
import javax.faces.bean.ApplicationScoped;
import javax.faces.bean.ManagedBean;

@ManagedBean(eager = true)
@ApplicationScoped
public class ParentBean
{
    static int initCount = 0;

    // ...

    @PostConstruct
    public void init()
    {
        ++initCount; // Will end up being between 1 and 3. Expected always 1.

        // ...
    }
}

Child1Bean.java

package example;

import javax.annotation.PostConstruct;
import javax.faces.bean.ApplicationScoped;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;

@ManagedBean(eager = true)
@ApplicationScoped
public class Child1Bean
{
    @ManagedProperty("#{parentBean}") ParentBean parentBean;

    public ParentBean getParentBean()
    {
        return parentBean;
    }

    public void setParentBean(ParentBean parentBean)
    {
        this.parentBean = parentBean;
    }

    @PostConstruct
    public void init()
    {
        // manipulate parentBean
    }
}

Child2Bean.java

package example;

import javax.annotation.PostConstruct;
import javax.faces.bean.ApplicationScoped;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;

@ManagedBean(eager = true)
@ApplicationScoped
public class Child2Bean
{
    @ManagedProperty("#{parentBean}") ParentBean parentBean;

    public ParentBean getParentBean()
    {
        return parentBean;
    }

    public void setParentBean(ParentBean parentBean)
    {
        this.parentBean = parentBean;
    }

    @PostConstruct
    public void init()
    {
        // manipulate parentBean
    }
}

我希望在 Tomcat 8 + Mojarra 2.2.0 上解决这个问题。 就我而言,我刚刚从 web.xml 中删除了侦听器声明

<listener>
    <listener-class>com.sun.faces.config.ConfigureListener</listener-class>
</listener>

构造函数似乎随后被调用一次。

关于监听器入口,有BalusC答案的一部分this问题。

无论如何,在 web.xml 中显式注册 Mojarra 的 ConfigureListener 实际上只需要解决旧有问题的服务器(例如 GlassFish v3 和 Jetty),这些服务器无法在 Mojarra 的 TLD 文件中找到侦听器。当部署到一个像样的服务器时,整个条目是不必要的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

多次构造的 Eager ApplicationScoped 托管 bean 的相关文章

随机推荐

  • 模板和单独编译

    我想用 C 编写一个单独编译的程序 我写了这样的 main cpp include
  • 在生成器函数上使用 next()

    我有这个生成器功能 def gen for i in range 3 yield i i 现在当我打电话时next on gen 它每次都给出第一个元素 gt gt gt next gen 0 gt gt gt next gen 0 但是当
  • 如何将 R Markdown 转换为 HTML?即,“Knit HTML”在 Rstudio 0.96 中做什么?

    在 Rstudio 0 96 中的 R Markdown 文件上按 Knit HTML 时会运行哪些命令 我的动机是 当我在另一个文本编辑环境中时 我可能想运行相同的命令 或者我可能想将命令组合到更大的文本编辑器中 makefile 基本脚
  • 使用 Plink (PuTTy) 通过 Python 进行 SSH

    我正在尝试编写一个 python 脚本 它将通过 SSH 连接到服务器并执行命令 我在 Windows 上使用 Python 2 6 并安装了 plink 和 paegent 用于 ssh 密钥 并将它们全部添加到我的路径中 如果我转到命令
  • 改造 - 多部分请求:所需的 MultipartFile 参数“文件”不存在

    我正在尝试使用 Retrofit2 在服务器上发送文件 我按照文档做了一切 但总是收到 400 服务器错误 我尝试这样做 RequestBody body RequestBody create MediaType parse image p
  • 在括号中显示 p 值而不是 SE

    当使用stargazer包中 我想更改系数下括号中出现的值 默认情况下 包将输出标准错误 如何将实际 p 值包含在括号中 正如中提到的Stargazer 省略测试统计 从5 0版本开始stargazer已包括report允许用户选择要报告哪
  • 如何在自托管 Windows 代理上从 Azure DevOps 管道运行 Azure CLI 任务?

    情况 我的自托管 Windows 代理运行来自 Azure DevOps 的管道 到 管理 Azure 中的资源 我想使用 Azure CLI 任务 即使在前面的步骤中安装了 Azure CLI AzureCLI 任务也会失败 我有两个从我
  • 以编程方式执行单击 Actor libgdx

    我的问题很简单 我有一些ClickListener添加到 Actor 中 我想以编程方式对它们执行单击事件 就像是myActor performClick 您还可以使用 InputEvent event1 new InputEvent ev
  • 获取 SelectOneMenu 的选定值

    我正在 jsf 页面上测试组件 SelectOneMenu 我通过我的 ManageBean 动态地填充这个组件 将从数据库中获取所有动物 我想知道是否可以看到用户选择的 SelectOneMenu 组合框 项目 我正在尝试使用 value
  • 有主机和无主机的入口

    理解和调试入口规则确实变得越来越困难 有人可以分享一个好的参考吗 问题是在不指定主机的情况下入口如何工作 apiVersion extensions v1beta1 kind Ingress metadata annotations ngi
  • 如何使用git拉取特定目录

    我有一个使用 git 的项目 我只想克隆或拉取特定目录 例如 myproject javascript 就像 subversion 一样 进行一些更改 提交并再次推回 这是可能的 cd 到您的存储库副本的顶部 git fetch git c
  • 比较两个数组 Javascript - 关联

    我在这里搜索了一种比较 javascript 中关联数组的质量方法 我发现的唯一合适的解决方案是PHP JS项目具有一些比较数组功能 唯一的问题是这些函数将第一个数组视为第二个数组的键 在我的情况下 至少两个数组并不总是具有相同的键数或相同
  • ng-重复完成事件

    我想调用一些针对 div 和 table 的 jQuery 函数 该表填充有ng repeat 当我打电话时 document ready 我没有结果 Also scope on viewContentLoaded myFunc 没有帮助
  • 使用 ssl 模块的 HTTPS 代理隧道

    我想手动 使用socket and ssl模块 制作一个HTTPS通过本身使用的代理请求HTTPS 我可以执行初始操作CONNECT交换就好 import ssl socket PROXY ADDR proxy addr 443 CONNE
  • XSLT:将分组 html 元素移动到节级别

    我正在尝试编写一个 XSLT 根据标头级别将 HTML 文件组织为不同的部分级别 这是我的输入 h1 HEADER 1 CONTENT h1 p Level 1 para p p Level 1 para p p Level 1 para
  • 为什么我的随机数总是相同?

    我正在使用random numberFortran 的子例程 但在程序的不同运行中 生成的数字不会改变 我应该在代码中包含什么 以便每次编译和运行程序时数字都会发生变化 随机数生成器产生伪随机数 要每次运行获得不同的数字 您需要初始化随机种
  • 将 WPF 绑定错误转换为运行时异常。不适用于已发布的已发布应用程序

    我想将数据绑定错误记录到文件中 我使用了这个接受的答案中提出的解决方案 如何将绑定错误转化为运行时异常 我也尝试过这个 http msdn microsoft com en us library system diagnostics pre
  • javax.crypto 在不同版本的 Android 操作系统中工作方式不同吗?

    我使用此代码片段来加密 解密应用程序数据库中的数据 http www androidsnippets com encryptdecrypt strings 看来 javax crypto KeyGenerator generateKey 操
  • 在 JIRA REST API 中启用 CORS

    我在 Confluence 用户宏中从 JavaScript 调用 JIRA REST API 并且面临 CORS 问题 因为 JIRA 和 Confluence 位于两个不同的域中 并且飞行前请求从浏览器失败 我已经尝试了如下所述的几种
  • 多次构造的 Eager ApplicationScoped 托管 bean

    我有一堆eager ApplicationScoped托管豆 其中一些是通过注射到其他体内的ManagedProperty注解 形成依赖树 每个依赖 bean 在构建后都会操纵其父代 然而 似乎每次注入都会创建一个新实例 从而撤销之前的操作