JSF无法修改构面

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,因此不能添加标签。

如何以编程方式访问和修改构面?我很难过。

+0

为什么要新(以错误的方式顺便说一句)创建** panelgrid **返回非相关菜单栏的方面? – Kukeltje

要从到getFacets()您需要获取现有menubar实例的参考。

您可以通过将p:menubar绑定到服务器端组件实例来实现此目的。

  1. 在你管理的bean添加

private org.primefaces.component.menubar.Menubar menubar;

,并添加getter和setter。

  1. 添加binding属性p:menubar这样

    <p:menubar model="#{menu.model}" id="myMenu" binding="#{menu.menubar}"> 
        <f:facet name="options"> 
    
        </f:facet> 
    </p:menubar> 
    
  2. 内部@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); 
    } 
    
  3. 同时检查建议和最佳实践关于JSF 'binding' attribute

开始=>
+0

谢谢你试图回答。当然,这与声明性添加的menumodel一起工作?通过“新”创建组件并不是一个好习惯。 – Kukeltje

+0

我已经用用户发布的案例(没有声明数据模型)测试过这个解决方案。我同意它不是最佳做法,但我认为在这种情况下没有任何伤害。 –

+0

对不起,我的意思是对menuModel的引用是通过属性声明的,而不是声明性的菜单结构。 OP在他的问题中有这个。 – Kukeltje