我有一个带有两个选项的菜单,并且根据我选择的选项,我的应用程序应显示RepoNavBar或UserNavBar。该类是NavBar的子级。
我有一个CommonPage,在所有项目中都有一些通用组件,该类有两个子RepoCommonPage和UserCommonPage,其中两个子声明为RepoNavBar和UserNavBar。
CommonPage使用类似ContentComponent类型的类,如下所示:
public void setup(CommonPage<?> parentPage) {
...
}
当我尝试编译时,出现以下错误:
原因:java.lang.RuntimeException:发现了以下依赖关系问题:
[INFO]类@Any @Default com.client.local.usermgt.common.UserCommonPage中的@Default com.client.local.common.ContentComponent字段的解析不明确。
有什么事吗
这是我的做法:
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();
}
}
最佳答案
我敢打赌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{
...
}