Неоднозначное разрешение для поля @Default в Errai - PullRequest
4 голосов
/ 22 мая 2019

У меня есть меню с двумя опциями, и в зависимости от того, какую опцию я выберу, мое приложение должно отображать RepoNavBar или UserNavBar. Эти классы являются детьми NavBar.

У меня есть CommonPage, в котором есть несколько общих компонентов во всем проекте, и у этого класса есть два дочерних элемента RepoCommonPage и UserCommonPage, в которых объявлены RepoNavBar и UserNavBar.

CommonPage использует классы типа ContentComponent, такие как:

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

Когда я пытаюсь скомпилировать, я получаю эту ошибку:

Причина: java.lang.RuntimeException: были обнаружены следующие проблемы с зависимостями: [ИНФО] Неоднозначное разрешение для поля @Default com.client.local.common.ContentComponent в классе @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 внедряется так:

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();
    }
}

1 Ответ

1 голос
/ 22 мая 2019

Моя ставка такова, что UserCommonPage (как и другие, такие как RepoCommonPage) должны быть abstract.

Кроме того, если этого недостаточно, возможно, вам нужно создать третий промежуточный класс, который расширяется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{
   ...
}

...