首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将具有托管属性的JSF转换为CDI

将具有托管属性的JSF转换为CDI
EN

Stack Overflow用户
提问于 2012-05-10 20:57:26
回答 1查看 917关注 0票数 3

我们有一个非常复杂的JSF托管bean配置文件,如下所示。

有没有办法把它转换成某种CDI配置?

现在,当我们在AbcConfigFactory上使用@Inject时,它不会初始化配置文件中的值。我猜这是因为我们使用CDI而不是JSF来初始化它。或者类似的东西。:)

代码语言:javascript
运行
复制
<?xml version="1.0" encoding="UTF-8"?>
<faces-config version="1.2"
   xmlns="http://java.sun.com/xml/ns/javaee"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd">

   <managed-bean>
      <managed-bean-name>AbcConfig</managed-bean-name>
      <managed-bean-class>com.a.b.c.AbcConfigFactory</managed-bean-class>
      <managed-bean-scope>application</managed-bean-scope>
      <managed-property>
         <property-name>abcSites</property-name>
         <list-entries>
            <value-class>com.a.b.c.SiteConfigBean</value-class>
            <value>#{SiteConfig$A}</value>
            <value>#{SiteConfig$B}</value>
         </list-entries>
      </managed-property>
   </managed-bean>


   <managed-bean>
      <managed-bean-name>SiteConfig$A</managed-bean-name>
      <managed-bean-class>com.a.b.c.SiteConfigBean</managed-bean-class>
      <managed-bean-scope>none</managed-bean-scope>
      <managed-property>
         <property-name>siteName</property-name>
         <value>A</value>
      </managed-property>

      <managed-property>
         <property-name>starConfig</property-name>
         <property-class>com.a.b.c.StarConfigBean</property-class>
         <value>#{StarConfig$A}</value>
      </managed-property>
   </managed-bean>

   <managed-bean>
      <managed-bean-name>SiteConfig$B</managed-bean-name>
      <managed-bean-class>com.a.b.c.SiteConfigBean</managed-bean-class>
      <managed-bean-scope>none</managed-bean-scope>
      <managed-property>
         <property-name>siteName</property-name>
         <value>B</value>
      </managed-property>

      <managed-property>
         <property-name>starConfig</property-name>
         <property-class>com.a.b.c.StarConfigBean</property-class>
         <value>#{StarConfig$A}</value>
      </managed-property>
   </managed-bean>

   <managed-bean>
      <managed-bean-name>StarConfig$A</managed-bean-name>
      <managed-bean-class>com.a.b.c.StarConfigBean</managed-bean-class>
      <managed-bean-scope>none</managed-bean-scope>
      <managed-property>
         <property-name>siteName</property-name>
         <value>A</value>
      </managed-property>
   </managed-bean>
</faces-config>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-05-10 21:26:44

最初版本的CDI规范中包含XML配置bean,但后来将其删除,只是为了在最近的规范未来版本(AFAIK)中重新包含它。

因此,简短的答案是:不,您不能使用XML来配置CDI (而且由于CDI和JSF是两个不同的东西,您显然不能在没有更改的情况下重用JSF配置文件)。

您的问题的解决方案附带了Seam Solder,它使用CDI的扩展机制来添加确切的功能(以及更多)。但是,为了适应CDI-beans,您仍然需要重新处理配置。

在对问题域一无所知的情况下:

如果XML配置是某种历史遗留物,不是由现实世界的需求强制的(比如为不同的部署场景提供不同的连接),我强烈建议丢弃XML并切换到CDI的基于注释的类型安全方法。有适用于所有主流用例的概念(比如用于测试的不同连接),您可以从使用XML进行“编码”的负担中解脱出来。

如果你真的需要(或仍然想要)基于XML的配置,Seam Solder是你的选择。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10534494

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档