1 回答
TA贡献1773条经验 获得超3个赞
班级在
menuBar.getChildren().addAll((Collection<? extends UIComponent>) modelPrincipal.getElements());
有点合乎逻辑,因为org.primefaces.model.menu.DefaultMenuItem模型中的元素无论如何都不是 UIComponent(您可以通过跟踪源代码直到基类/接口来看到这一点)。即使您没有明确地转换它,它也会因相同的错误而失败,但会在另一个类的另一行上。
做的
menuBar.getElements().addAll(modelPrincipal.getElements());
出于同样的原因而失败。getElements() 如果您检查了中方法中的代码menuBar,您会看到
public List getElements() {
MenuModel model = getModel();
if (model != null) {
return model.getElements();
}
else {
return getChildren();
}
}
您甚至可以调试它并看到该模型为 null,然后将getChildren()返回 ,实际上以与您第一次尝试相同的调用结束。但...
您还会getModel()在那里看到 ,也许是在暗示在哪里寻找解决方案。menuBar 有一个setModel(...)to,您可以在其中设置您以编程方式创建的模型。所以解决方案是
menuBar.setModel(modelPrincipal);
如果您以编程方式创建 menuBar。
但大多数情况下,它是通过以下方式添加到 xhtml 中的
<p:menu model="#{menuBean.model}" />
一些额外的提示:
搜索“primefaces menu model 4.0 3.5”得到的结果会给你帮助/提示(至少 G00gle 向我展示了)
在 PrimeFaces 7 文档中键入“menumodel”会提示通用菜单组件中的动态菜单部分,具有完整的示例。https://primefaces.github.io/primefaces/7_0/#/components/menu
拥有一个在 java 代码或 xhtml 中完成代码的 IDE,并检查 api 是否会显示方法
setModel
或model
属性。
但我同意,迁移文档中的更多解释会有所帮助,但当时(至少我从 3.5 迁移到 4 时)论坛等中提到了这一点......所以当时它是“实际的”
添加回答
举报