如何根据主要面中的按钮单击向数据表添加新行?

时间:2014-10-26 05:16:23

标签: java primefaces jsf-2.2

嗨,我对primefaces很新。我尝试了以下功能。

我向primefaces数据表添加一个按钮column

根据button我向相同的数据添加新行table

为此我使用以下code

vendorcontacts.xhtml 中的

    <p:dataTable id="dt" var="pmr" value="#{globalMaster.vendorContactsList}"
                                    style="width:900px;">
                                    <p:column headerText="Organisation">
                                        <h:outputText value="#{pmr.contactSno}" />
                                    </p:column>

                                    <p:column headerText="Program">
                                        <h:outputText value="#{pmr.location}" />
                                    </p:column>

                                    <p:column headerText="Action" >
                                       <p:commandButton value="Add New" action="#{globalMaster.getVendorContactsList}"  />
                                    </p:column>
                                </p:dataTable>

我的Bean代码是:

public List<VendorContactDetails> getVendorContactsList(){
    try{
        VendorContactDetails veneContactDetails=new VendorContactDetails();
        vendorConList.add(veneContactDetails);

    }catch(Exception e){
        e.printStackTrace();
    }return vendorConList;
}

现在问题是;

我的视图页面显示单行显示。

当我点击添加新按钮时,我的视图页面显示3行而不是第2行。

我在调试模式中找到了一些我的list方法调用no.of times(i.e no.of properties in my modal class i.e VendorContactDetails)

我将bean范围会话更改为查看范围。但没有用。

我的代码中是否有任何错误。请指导我

1 个答案:

答案 0 :(得分:0)

首先,视图范围是正确的,但是;

getVendorContactsList()应该只在需要时初始化列表,并将其返回。

public List<VendorContactDetails> getVendorContactsList(){
    if (vendorConList == null)
    {
        vendorConList = new ArrayList<VendorContactDetails>();
    }
    return vendorConList;
}

然后,应该有一个单独的方法将项目添加到列表中。

public void addVendorContactToList(){
    getVendorContactsList().add(new VendorContactDetails());
}

最后,添加新项目的按钮不应该在表格列中。它不是与现有项目/行相关的操作。

<p:commandButton value="Add New" process="@this" update="dt"
    action="#{globalMaster.addVendorContactToList}"/>

如果您计划更新或删除列表中的项目,那么这些按钮将位于表格列中。