我正在尝试以编程方式修改.xhtml文件中的facet。我使用的是Primefaces 6.1。
我在.xhtml中有以下代码
<p:menubar model="#{menu.model}" id="myMenu">
<f:facet name="options">
</f:facet>
</p:menubar>
在我的bean中,我有以下代码来更新“options”facet。
@PostConstruct
public void initMenu(){
// getting data is skipped
HtmlPanelGrid mainPanel = new HtmlPanelGrid();
HtmlOutputLabel htmlOutputLabel = new HtmlOutputLabel();
htmlOutputLabel.setValue("Search Template");
mainPanel.getFacets().put("options",htmlOutputLabel);
}
mainPanel.getFacets()不返回任何构面,因此无法添加标签。
如何以编程方式访问和修改构面?我很难过。
答案 0 :(得分:0)
要getFacets()
来自menubar
,您需要参考现有menubar
的实例。
您可以通过将p:menubar
绑定到服务器端组件实例来实现此目的。
private org.primefaces.component.menubar.Menubar menubar;
并添加getter和setter。
将binding
属性添加到p:menubar
,就像这样
<p:menubar model="#{menu.model}" id="myMenu" binding="#{menu.menubar}">
<f:facet name="options">
</f:facet>
</p:menubar>
在@PostConstruct方法内添加
@PostConstruct
public void initMenu() {
// getting data is skipped
//initMenuModel();
menubar=(Menubar)FacesContext.getCurrentInstance().getApplication().createComponent(Menubar.COMPONENT_TYPE);
HtmlOutputText htmlOutputLabel = new HtmlOutputText();
htmlOutputLabel.setValue("Search Template");
Map<String, UIComponent> facets = menubar.getFacets();
facets.put("options", htmlOutputLabel);
}
同时查看有关JSF 'binding' attribute的建议和最佳做法。