パネルを保持するための panelgrid があると仮定すると、単純な jsf フラグメントは次のようになります。
<p:panelGrid id="myPanelGrid" columns="1">
</p:panelGrid>
<h:form>
<p:commandButton value="Add Panel" actionListener="#{bean.addPanel}" update=":myPanelGrid" />
</h:form>
バッキング Bean で、パネルを動的に追加するために必要な addPanel メソッド
public void addPanel(ActionEvent event) {
UIComponent component = FacesContext.getCurrentInstance().getViewRoot().findComponent("myPanelGrid");
if (component != null) {
Panel p = new Panel();
p.setClosable(true);
p.setHeader("Test");
p.setVisible(true);
component.getChildren().add(p);
}
}
このメソッドは、id でホルダー panelgrid コンポーネントを見つけ、新しい org.primefaces.component.panel.Panel を追加し、いくつかのフィールドを設定して親コンポーネントに追加します。
commandButton の update=":myPanelGrid" プロパティは、新しいデータで自分自身を更新するように panelGrid に通知します。