2

我有父类Navigation和子类ExtendingNavigationNavigation被注释为@Named("navigation")and @SessionScoped(javax.enterprise.context.SessionScoped;)。我在其中注入并在方法UserBean中初始化它。login()可以说我想userBean在其他类中使用。我该怎么做?为什么我不能从扩展Navigation

以下是类(仅用于示例):

导航

@Named("navigation")
@SessionScoped
public class Navigation implements Serializable {
    private static final long serialVersionUID = 1L;

    @Inject
    protected UserBean userBean;

        public void logout() {
        userBean = null;
    }

    public void login() {       
        EntityManager em = JPAUtil.getEntityManagerFactory().createEntityManager();
        userBean = em.find(UserBean.class, userBean.getUsername());
    }
}

扩展导航

public class ExtendingNavigation extends Navigation{


}

如果我尝试编译它,它会给我一个错误。

17:01:29,956 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-7) MSC00001: Failed to start service jboss.deployment.unit."timereport.war".WeldService: org.jboss.msc.service.StartException in service jboss.deployment.unit."timereport.war".WeldService: org.jboss.weld.exceptions.DeploymentException: WELD-001409 Ambiguous dependencies for type [NavigationBean] with qualifiers [@Default] at injection point [[field] @Inject timereport.ui.biz.faces.context.ValidateUserAuthenticationAction.navigation]. Possible dependencies [[Managed Bean [class timereport.navigation.NavigationBean] with qualifiers [@Any @Default @Named], Managed Bean [class timereport.navigation.ExtendingNavigation] with qualifiers [@Any @Default]]]
    at org.jboss.as.weld.services.WeldService.start(WeldService.java:96)
    at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1824) [jboss-msc-1.0.1.GA.jar:1.0.1.GA]
    at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1759) [jboss-msc-1.0.1.GA.jar:1.0.1.GA]
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:885) [:1.6.0_07]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907) [:1.6.0_07]
    at java.lang.Thread.run(Thread.java:619) [:1.6.0_07]
Caused by: org.jboss.weld.exceptions.DeploymentException: WELD-001409 Ambiguous dependencies for type [NavigationBean] with qualifiers [@Default] at injection point [[field] @Inject timereport.ui.biz.faces.context.ValidateUserAuthenticationAction.navigation]. Possible dependencies [[Managed Bean [class timereport.navigation.NavigationBean] with qualifiers [@Any @Default @Named], Managed Bean [class timereport.navigation.ExtendingNavigation] with qualifiers [@Any @Default]]]
    at org.jboss.weld.bootstrap.Validator.validateInjectionPoint(Validator.java:274)
    at org.jboss.weld.bootstrap.Validator.validateBean(Validator.java:106)
    at org.jboss.weld.bootstrap.Validator.validateRIBean(Validator.java:129)
    at org.jboss.weld.bootstrap.Validator.validateBeans(Validator.java:351)
    at org.jboss.weld.bootstrap.Validator.validateDeployment(Validator.java:336)
    at org.jboss.weld.bootstrap.WeldBootstrap.validateBeans(WeldBootstrap.java:404)
    at org.jboss.as.weld.WeldContainer.start(WeldContainer.java:82)
    at org.jboss.as.weld.services.WeldService.start(WeldService.java:89)
    ... 5 more

请帮忙!

4

3 回答 3

1

问题不在于注入UserBean,您绝对可以在其他地方使用它。

问题是您的子类与您的类ExtendingNavigation具有相同的限定符Navigation(名称“导航”)。ExtendingNavigation@Named("extendedNavigation")或类似的东西注释,然后在你希望使用它的地方指定它@Named("extendedNavigation")@Inject

这样想:你说“给我一个 X 类的实例”,而 Weld 说“我不知道你想要哪个”,因为实际上有两个类是 Navigation。

class ValidateUserAuthenticationAction {
    @Inject
    @Named("extendedNavigation")
    private Navigation navigation;
}

另外,尝试使用接口!导航应该是一个界面。BasicNavigation 应该实现它,ExtendedNavigation 也应该实现它。

于 2011-11-24T20:59:30.497 回答
1

你的问题是你Navigation在你的类中注入了一个实例,ValidateUserAuthenticationAction但是你有两个不同的类可以在那个注入点使用,就像主要的异常状态一样。解决此问题的最简单方法是将限定符添加到注入点(如果您选择)和两个Navigation类之一。

限定符是这个问题的解决方案,也是它们在规范中的全部意义。限定符为注入点添加了额外的消歧,或者换句话说,它有助于专门化一个类和一个注入点。

于 2011-11-24T20:15:12.440 回答
0

我有非常相似的问题,我得到了一些离线帮助。我的问题是,我的服务在哪里,它包含在部署的耳朵和我的网络项目中。这是一个意外的重复,删除一个,如果它也是你的情况,它也会起作用。

在下面的图片中,我在 esb_khr_web 中有 esb_khr,我删除了。在 Eclipse 中:转到属性和部署程序集。

在此处输入图像描述

于 2013-03-19T10:17:55.207 回答