gpt4 book ai didi

jsf-2 - 将 JSF 托管 Bean 迁移到 CDI 托管 Bean

转载 作者:行者123 更新时间:2023-12-02 09:10:10 30 4
gpt4 key购买 nike

我计划将 Web 应用程序从使用 JSF 托管 Bean 转换为使用 CDI 托管 Bean。我知道我需要执行以下操作:

  1. 在 WEB-INF 中添加一个空 beans.xml 文件。
  2. 将所有 JSF @ManagedBean 替换为 CDI @Named 注释。
  3. 将所有 JSF 范围注释替换为 CDI 或 OmniFaces 范围注释。
  4. 将所有 JSF @ManagedProperty 替换为 CDI @Inject 注释。

这就是需要做的所有事情吗?有什么我需要注意的问题吗?

最佳答案

基本上,只要您已经在 J​​ava EE 服务器上,这确实是您需要做的全部事情。在 Tomcat 上时,您需要首先手动安装 CDI。博客 How to install CDI in Tomcat? 中详细介绍了 Weld 和 OpenWebBeans 的说明。

需要注意以下问题:

  • 虽然 OmniFaces 2.x“正式”需要 JSF 2.2,但 OmniFaces 2.0/2.1 在技术上与 JSF 2.1 向后兼容,并且在 TomEE 的案例中也应该可以在带有 JSF 2.1 的 TomEE 1.x 上工作,但 OmniFaces 2.2 已经硬 JSF 2.2 依赖项(由于新的 <o:viewAction> 标记),并且如果不将其 MyFaces JSF 实现升级到 2.2 兼容版本,或者将其本身升级到 TomEE 7.x,则不会部署在 TomEE 1.x 上。另请参阅OmniFaces Compatibility Matrix .

  • 当您部署具有多个 WAR 的 EAR(每个 WAR 都有其自己的 OmniFaces 库)时,通常所有 CDI 功能都只能在一个 WAR 中工作,因为 WAR 提供的库的 CDI 上下文被错误地解释为 EAR 范围内的。这是 CDI 规范中的一个疏忽,尚未在未来的 CDI 版本中修复。另请参阅OmniFaces Known Issues (CDI) .

  • 当您想要在 @FacesConverter 中使用 OmniFaces 提供的 CDI 注入(inject)支持时或@FacesValidator ,您将创建/使用 CDI 1.1 兼容 beans.xml (因此不是 CDI 1.0 兼容的或空的),那么您需要确保已明确设置 bean-discovery-mode="all"beans.xml 。另请参阅 @FacesConverter showcase .

  • 替换 @ManagedBean(eager=true) 时,请注意标准 CDI 对此没有直接等效项。您可以使用 @Observes为了这。 OmniFaces 优惠 @Eager 注释为目的。另请参阅How to configure a start up managed bean?

  • 替换 @ManagedProperty 时在 JSF 2.0/2.1/2.2 中,请注意您无法注入(inject) #{param.xxx} , #{cookie.xxx}#{initParam.xxx}直接通过@Inject单独,而这只能通过 @ManagedProperty 实现。 OmniFaces分别提供 @Param , @Cookie @ContextParam 为目的。仅在 JSF 2.3 中才有新的 @javax.faces.annotation.ManagedProperty注释的使用方式与原始 @javax.faces.bean.ManagedProperty 完全相同自 JSF 2.3 起已弃用。

关于jsf-2 - 将 JSF 托管 Bean 迁移到 CDI 托管 Bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36155440/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com