org.primefaces.model.menu.DefaultSubMenu 无法转换为

我正在尝试从 PrimeFaces 3.5 升级到 PrimeFaces 4.0,这行代码在 3.5 版上很好:


private MenuModel modelPrincipal;

private Menubar menuBar;


menuBar.getChildren().addAll(modelPrincipal.getContents());

但是当我升级到 4.0 版时,我必须按如下方式更改它:


private org.primefaces.model.menu.DefaultMenuModel modelPrincipal;

private Menubar menuBar;

menuBar.getChildren().addAll((Collection<? extends UIComponent>) modelPrincipal.getElements());

它抛出标题异常,你们知道解决方法吗?我在迁移文档中找不到任何内容https://github.com/primefaces/primefaces/wiki/Migration-Guide


我也试过:


menuBar.getElements().addAll(modelPrincipal.getElements());

但给我同样的例外


任何帮助表示赞赏


沧海一幻觉
浏览 78回答 1
1回答

慕容3067478

班级在&nbsp;menuBar.getChildren().addAll((Collection<? extends UIComponent>) modelPrincipal.getElements());有点合乎逻辑,因为org.primefaces.model.menu.DefaultMenuItem模型中的元素无论如何都不是 UIComponent(您可以通过跟踪源代码直到基类/接口来看到这一点)。即使您没有明确地转换它,它也会因相同的错误而失败,但会在另一个类的另一行上。做的menuBar.getElements().addAll(modelPrincipal.getElements());出于同样的原因而失败。getElements() 如果您检查了中方法中的代码menuBar,您会看到public List getElements() {&nbsp; &nbsp; MenuModel model = getModel();&nbsp; &nbsp; if (model != null) {&nbsp; &nbsp; &nbsp; &nbsp; return model.getElements();&nbsp; &nbsp; }&nbsp; &nbsp; else {&nbsp; &nbsp; &nbsp; &nbsp; return getChildren();&nbsp; &nbsp; }}您甚至可以调试它并看到该模型为 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 时)论坛等中提到了这一点......所以当时它是“实际的”
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java