1 回答

TA貢獻1773條經(jīng)驗 獲得超3個贊
班級在
menuBar.getChildren().addAll((Collection<? extends UIComponent>) modelPrincipal.getElements());
有點合乎邏輯,因為org.primefaces.model.menu.DefaultMenuItem模型中的元素無論如何都不是 UIComponent(您可以通過跟蹤源代碼直到基類/接口來看到這一點)。即使您沒有明確地轉(zhuǎn)換它,它也會因相同的錯誤而失敗,但會在另一個類的另一行上。
做的
menuBar.getElements().addAll(modelPrincipal.getElements());
出于同樣的原因而失敗。getElements() 如果您檢查了中方法中的代碼menuBar,您會看到
public List getElements() {
MenuModel model = getModel();
if (model != null) {
return model.getElements();
}
else {
return getChildren();
}
}
您甚至可以調(diào)試它并看到該模型為 null,然后將getChildren()返回 ,實際上以與您第一次嘗試相同的調(diào)用結(jié)束。但...
您還會getModel()在那里看到 ,也許是在暗示在哪里尋找解決方案。menuBar 有一個setModel(...)to,您可以在其中設(shè)置您以編程方式創(chuàng)建的模型。所以解決方案是
menuBar.setModel(modelPrincipal);
如果您以編程方式創(chuàng)建 menuBar。
但大多數(shù)情況下,它是通過以下方式添加到 xhtml 中的
<p:menu model="#{menuBean.model}" />
一些額外的提示:
搜索“primefaces menu model 4.0 3.5”得到的結(jié)果會給你幫助/提示(至少 G00gle 向我展示了)
在 PrimeFaces 7 文檔中鍵入“menumodel”會提示通用菜單組件中的動態(tài)菜單部分,具有完整的示例。https://primefaces.github.io/primefaces/7_0/#/components/menu
擁有一個在 java 代碼或 xhtml 中完成代碼的 IDE,并檢查 api 是否會顯示方法
setModel
或model
屬性。
但我同意,遷移文檔中的更多解釋會有所幫助,但當時(至少我從 3.5 遷移到 4 時)論壇等中提到了這一點......所以當時它是“實際的”
添加回答
舉報