JSF无法修改构面
问题描述:
我试图以编程方式修改我的.xhtml文件中的构面。我正在使用Primefaces 6.1。JSF无法修改构面
我有.xhtml
<p:menubar model="#{menu.model}" id="myMenu">
<f:facet name="options">
</f:facet>
</p:menubar>
下面的代码在我的豆,我有以下的代码来更新“选项”方面。
@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()返回no facets,因此不能添加标签。
如何以编程方式访问和修改构面?我很难过。
答
要从到getFacets()
您需要获取现有menubar
实例的参考。
您可以通过将p:menubar
绑定到服务器端组件实例来实现此目的。
- 在你管理的bean添加
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。
为什么要新(以错误的方式顺便说一句)创建** panelgrid **返回非相关菜单栏的方面? – Kukeltje