2016-02-13 58 views
0

我实现了一个CDI豆从另一豆观察事件:为什么在faces-config.xml中的CDI托管Bean没有注册为obersver?

@SessionScoped 
public class FixedItemController implements Serializable { 
    .... 
    public void onWorkflowEvent(@Observes WorkflowEvent workflowEvent) throws AccessDeniedException { 
     logger.info("evaluate event..."); 
     .... 
    } 
    .... 
} 

这工作得很好,只要我使用JSF页面豆,其默认名称“fixedItemController”。

但如果我声明bean的另一个实例在faces-config.xml中像这样:

<managed-bean> 
     <managed-bean-name>myOrderItemController</managed-bean-name> 
     <managed-bean-class>org.imixs.marty.workflow.FixedItemController</managed-bean-class> 
     <managed-bean-scope>session</managed-bean-scope> 
     <managed-property> 
      <property-name>childItemProperty</property-name> 
      <property-class>java.lang.String</property-class> 
      <value>_orderItems</value> 
     </managed-property> 
    </managed-bean> 

二审(myOrderItemController)不会自动为我WorkflowEvent观察员登记。

我该怎么做,以确保我的第二个实例(由faces-config.xml声明)将立即实例化并注册为我的workitemEvent的观察者?

回答

1

faces-config.xml不注册CDI托管的bean。它注册JSF管理的bean。实际上,您的#{myOrderItemController}是JSF管理的bean。就好像你使用@ManagedBean而不是@Named。 JSF bean管理工具不会扫描CDI特定的@Observes注释。

将其保留为CDI管理的bean。无论您尝试解决哪些问题,您认为在faces-config.xml中注册它是正确的解决方案,必须使用CDI API而不是JSF API来解决。

+0

感谢 - 所以你的意思是,我必须使用beans.xml描述符而不是faces-config.xml? – Ralph

+0

取决于具体的功能要求。通常,您只使用注释/限定符/生产者,并将beans.xml保留为原来的内容。 – BalusC

相关问题