1

プライムフェイスにパネルを動的に追加するにはどうすればよいですか?

目標は、パネルを追加するためのボタンを用意することです。次のコードの closeable オプションを使用すると、パネルを簡単に削除できます。

<p:panel id="panel1" header="Panel 1" style="width : 150px;" toggleable="true" closable="true" toggleSpeed="500" closeSpeed="500"> Move and Resize ME!</p:panel>
4

2 に答える 2

9

パネルを保持するための 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 に通知します。

于 2013-04-05T16:20:13.580 に答える
1

単純に、次のように属性を持つ aに my<p:panelをネストします。<h:panelGrouprendered

<h:panelGroup id="myPanelGroup">
    <p:panel rendered="#{myBean.renderPanel}">
        <span>Content</span>
    </p:panel>
</h:panelGroup>
<p:commandButton action="#{myBean.showPanel()}" update="myPanelGroup"
    value="Show Panel" />
<p:commandButton action="#{myBean.hidePanel()}" update="myPanelGroup"
    value="Hide Panel" />

豆 :

@ManagedBean
@ViewScoped
public class MyBean {

    private boolean renderPanel;

    public void showPanel() {
        this.renderPanel = true;
    }

    public void hidePanel() {
        this.renderPanel = false;
    }

    // Getter for renderPanel
}

@ViewScoped:必要に応じて、ここでの使用を避ける方が良いでしょう。renderPanelフォーム(チェックボックスなど)にバインドできます

于 2013-04-04T19:07:02.393 に答える