Класскаст в
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();
}
}
Вы могли бы даже отладить его и увидеть, что модель была нулевой, и тогда getChildren()
будет возвращен, фактически заканчивая теми же вызовами, что и в вашей первой попытке. Но ...
Вы также увидите там getModel()
, возможно, подсказку, где искать решение. Панель меню имеет setModel(...)
, где вы можете установить модель, которую вы создали программно. Таким образом, решение для этого
menuBar.setModel(modelPrincipal);
ЕСЛИ вы создаете панель меню программно.
Но чаще всего он добавляется в xhtml через
<p:menu model="#{menuBean.model}" />
Некоторые дополнительные подсказки:
- В результате поиска "primefaces menu model 4.0 3.5" были получены хиты, которые дали бы вам помощь / подсказки (по крайней мере, тогда мне показывал G00gle)
- ввод 'menumodel' в документации по PrimeFaces 7 дал бы подсказку для части динамического меню в универсальном компоненте меню, имея полный полный пример. https://primefaces.github.io/primefaces/7_0/#/components/menu
- Наличие IDE с дополнением кода в java-коде или xhtml и проверка API показали бы метод
setModel
или атрибут model
.
Но я согласен, немного больше объяснений в документе о миграции помогло бы, но в то время (когда я по крайней мере мигрировал с 3,5 на 4) это упоминалось на форумах и т. Д., Поэтому оно было «актуальным» в то время