1 回答

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