Primefaces组件更新属性

时间:2015-12-08 08:35:53

标签: jsf primefaces jsf-2.2

我希望在JSF 2.2页面中更新一组p:accordionPanel

第一个列出列表中的项目作为选项卡,在选项卡中显示列表项的名称以及删除该项目的按钮。单击删除可正确删除该项目并通过ajax

更新面板

当所有项目都被移除后,它将呈现一个新的手风琴面板,通知用户没有物品,需要添加一个。

这一切都运行正常,但是当添加新项目时,应该再次渲染第一个显示该项目的手风琴面板,并选择将其删除。

我相信以下内容是最小的,完整的和可验证的(如果不是,请告诉我原因)

xHTML

<!DOCTYPE html>
<html xmlns="http://www.w3c.org/1999/xhtml"
    xmlns:h="http://xmlns.jcp.org/jsf/html"
    xmlns:p="http://primefaces.org/ui">
<h:head>
    <title>Forms</title>
</h:head>
<h:body>
    <h:form id="mainForm">
        <p:outputPanel id="panelContainer">
            <p:accordionPanel id="formsPanel" value="#{formController.forms}"
                var="formInstance" rendered="#{not empty formController.forms}">
                <p:tab title="#{formInstance.name}">
                    <p:panelGrid columns="3" layout="grid">
                        <h:outputLabel for="name" value="Form name:" />
                        <h:outputText id="name" value="#{formInstance.name}" />
                        <p:commandButton
                            action="#{formController.deleteForm(formInstance.name)}"
                            value="Delete form" update=":mainForm:panelContainer" />
                    </p:panelGrid>
                </p:tab>
            </p:accordionPanel>
            <p:accordionPanel id="addFormPanel"
                rendered="#{empty formController.forms}">
                <p:tab title="No forms added yet, please add some">
                    <h:form>
                        <p:panelGrid columns="3" layout="grid">
                            <h:outputLabel value="Form name:" />
                            <p:inputText value="#{formController.form.name}" required="true"
                                label="text" />
                            <p:commandButton update=":mainForm:panelContainer"
                                action="#{formController.createForm}" value="Add form" />
                        </p:panelGrid>
                    </h:form>
                </p:tab>
            </p:accordionPanel>
        </p:outputPanel>
    </h:form>
</h:body>
</html>

表格

public class Form implements Serializable
{

    private String name;

    public Form()
    {

    }

    public Form(String name)
    {
        this.name = name;
    }

    public String getName()
    {
        return name;
    }

    public void setName(String name)
    {
        this.name = name;
    }

}

FormController

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.faces.view.ViewScoped;
import javax.inject.Named;

@Named
@ViewScoped
public class FormController implements Serializable
{

    private static List<Form> forms;

    {
        forms = new ArrayList<>();
        forms.add(new Form("Form 1"));
        forms.add(new Form("Form 2"));
    }

    private Form form = new Form();

    public void createForm()
    {
        forms.add(form);
        form = new Form();
    }

    public void deleteForm(String name)
    {
        for(int i=0; i < forms.size(); i++)
        {
            Form form = forms.get(i);
            if (form.getName().equals(name))
            {
                forms.remove(i);
            }
        }
    }

    public List<Form> getForms()
    {
        return forms;
    }

    public Form getForm()
    {
        return form;
    }

}

0 个答案:

没有答案