您如何在primefaces中动态添加面板?
目标是有一个按钮来添加面板。使用以下代码中的可关闭选项可以轻松删除面板:
<p:panel id="panel1" header="Panel 1" style="width : 150px;" toggleable="true" closable="true" toggleSpeed="500" closeSpeed="500"> Move and Resize ME!</p:panel>
答案 0 :(得分: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找到您的holder panelgrid组件,添加一个新的org.primefaces.component.panel.Panel并设置几个字段并将其添加到父组件。
commandButton的update =“:myPanelGrid”属性将通知panelGrid使用新数据更新自己。
答案 1 :(得分:1)
我只需将<p:panel
嵌套在<h:panelGroup
rendered
属性中,就这样:
<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" />
The Bean:
@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
(例如复选框)