java - Errai 中@Default 字段的模糊解析

标签 java cdi errai

我有一个包含两个选项的菜单,根据我选择的选项,我的应用程序应该显示 RepoNavBar 或 UserNavBar。这个类是 NavBar 的子类。

我有一个 CommonPage,其中包含所有项目中的一些公共(public)组件,该类有两个子 RepoCommonPage 和 UserCommonPage,其中声明了 RepoNavBar 和 UserNavBar。

CommonPage 像这样使用 ContentComponent 类型的类:

public void setup(CommonPage<?> parentPage) { 
    ...
}

当我尝试编译时,出现此错误:

Caused by: java.lang.RuntimeException: The following dependency problems were found: [INFO] Ambiguous resolution for field @Default com.client.local.common.ContentComponent in Class @Any @Default com.client.local.usermgt.common.UserCommonPage.

有什么问题吗?

我是这样的:

public abstract class NavBarComponent implements IsElement {

    @Templated(value = "navbar.html#navBtn")
    public static class NavBarItemComponent extends SimpleValueItemComponent<String> {...}
    ...
}
public class RepoNavBarComponent extends NavBarComponent {
     ...
}

public class UserNavBarComponent extends NavBarComponent {
     ...
}

public abstract class CommonPage<T extends ContentComponent> {
     ...
}

public class UserCommonPage<T extends ContentComponent> extends CommonPage<T>{
     ...
}

public class RepoCommonPage<T extends ContentComponent> extends CommonPage<T> { 
     ...
}

ContentComponent 是这样注入(inject)的:

public class UserCommonPage<T extends ContentComponent> extends CommonPage<T>{

    protected UserNavBarComponent userNavBar;

    public UserNavBarComponent getUserNavBar() {
        return userNavBar;
    }

    @PageShown
    public void preparePageShown() {
        log.debug("Page shown");
        userNavBar.refresh();
    }
}

最佳答案

我敢打赌,UserCommonPage(以及其他类似 RepoCommonPage)应该是抽象的

此外,如果这还不够,也许您需要创建第三个中间类,为每个用例扩展 ContentComponent。例如:

 public abstract class UserCommonPage<T extends UserContentComponent> extends CommonPage<T>{

    @Inject
    protected UserNavBarComponent userNavBar;

    public UserNavBarComponent getUserNavBar() {
        return userNavBar;
    }

    @PageShown
    public void preparePageShown() {
        log.debug("Page shown");
        userNavBar.refresh();
    }
}

public class UserContentComponent extends ContentComponent{
   ...
}

关于java - Errai 中@Default 字段的模糊解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56258205/

相关文章:

java - Libgdx 播放器旋转困惑

java - 没有bean符合注入(inject)到注入(inject)点的条件

java - 焊接-001408 : Unsatisfied dependencies for type UserService with qualifiers @Default at injection point [BackedAnnotatedField] @Inject

java - 在 @PostConstruct 中调用 JSNI 方法 - Errai

tomcat - 运行在 Tomcat 上的 Errai 4

java - 在 Java 中使用 AsposePDF 进行文本换行

java - Android - 如何解析 JSON 数组中的特定值并显示 Toast

java - 关于extern "C"的C++到Java的转换问题

java - 使用 JAX-RS 和 Glassfish 进行 CDI 和资源注入(inject)

java - Facebook DIV 未在页面上呈现