JSF无法修改方面

时间:2017-11-18 03:25:42

标签: jsf primefaces jsf-2.2

我正在尝试以编程方式修改.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()不返回任何构面,因此无法添加标签。

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

1 个答案:

答案 0 :(得分:0)

getFacets()来自menubar,您需要参考现有menubar的实例。

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

  1. 在您管理的bean中添加
  2. 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的建议和最佳做法。