在primefaces中重置datagrid的问题

时间:2016-04-01 10:03:38

标签: jsf primefaces datagrid

我是JSF的新手,我正在开发一个应用程序,可以添加或删除放置在数据网格中的一组参数。以下是屏幕截图的初始级别:

enter image description here

当我点击任何现有列表的RemoveInvoice时,该框后面的列表应自动获取已删除列表的位置。但在我的情况下,根据以下屏幕截图显示一个空白部分:

enter image description here

enter image description here

我的jsf代码如下:

    <div class="listing_Table">
        <p:dataGrid columns="3" layout="grid" id="addInvoicePanel"
            value="#{hrOrganizationPaymentDetailBean.invoiceDetailTOList}"
            var="invoiceDetail">
            <p:panelGrid rendered="#{!invoiceDetail.delete}">
                <div class="Table">
                    <div class="Row">
                        <div class="Cell">
                            <p:outputLabel>
                                <span class="redColor">*</span>InvoiceType:</p:outputLabel>
                        </div>
                        <div class="Cell">
                            <p:selectOneMenu value="#{invoiceDetail.invoiceTypeID}"
                                filter="true" filterMatchMode="contains" required="true"
                                requiredMessage="InvoiceType is required">
                                <f:selectItems
                                    value="#{hrOrganizationPaymentDetailBean.newInvoiceTypeList}"
                                    var="list" itemValue="#{list.typeId}"
                                    itemLabel="#{list.type}" />
                            </p:selectOneMenu>
                        </div>
                    </div>
                    <div class="Row">
                        <div class="Cell">
                            <p:outputLabel>
                                <span class="redColor">*</span>InvoiceNumber:</p:outputLabel>
                        </div>
                        <div class="Cell">
                            <p:inputText value="#{invoiceDetail.invoiceNumber}"
                                required="true" requiredMessage="InvoiceNumber is required" />
                        </div>
                    </div>
                    <div class="Row">
                        <div class="Cell">
                            <p:outputLabel>
                                <span class="redColor">*</span>InvoiceAmount:</p:outputLabel>
                        </div>
                        <div class="Cell">
                            <p:inputText value="#{invoiceDetail.invoiceAmount}"
                                required="true" requiredMessage="InvoiceAmount is required">
                                <f:convertNumber pattern="#0.00" />
                            </p:inputText>
                        </div>
                    </div>
                    <div class="Row">
                        <div class="Cell">
                            <p:outputLabel>InvoicePath:</p:outputLabel>
                        </div>
                        <div class="Cell">
                            <p:inputText value="#{invoiceDetail.invoicePath}" />
                        </div>
                    </div>
                    <div class="Row">
                        <div class="Cell">
                            <p:outputLabel>
                                <span class="redColor">*</span>InvoiceDate:</p:outputLabel>
                        </div>
                        <div class="Cell">
                            <p:calendar id="invoiceDate"
                                value="#{invoiceDetail.invoiceDate}" showOn="button"
                                readonlyInput="true" timeZone="IST" pattern="dd-MMM-yyyy"
                                required="true" requiredMessage="InvoiceDate is required" />
                        </div>
                    </div>
                    <div class="Row">
                        <div class="Cell">
                            <p:outputLabel value="ServiceTax:" />
                        </div>
                        <div class="Cell">
                            <p:inputText value="#{invoiceDetail.serviceTax}">
                                <f:convertNumber pattern="#0.00" />
                            </p:inputText>
                        </div>
                    </div>
                    <div class="Row">
                        <div class="Cell">
                            <p:outputLabel value="TDS:" />
                        </div>
                        <div class="Cell">
                            <p:inputText value="#{invoiceDetail.tDS}">
                                <f:convertNumber pattern="#0.00" />
                            </p:inputText>
                        </div>
                    </div>
                    <div class="Row">
                        <div class="Cell"></div>
                        <div class="Cell">
                            <p:commandButton styleClass="Submit_button"
                                value="Remove Invoice"
                                action="#{hrOrganizationPaymentDetailController.removeInvoiceDetail(invoiceDetail)}"
                                update=":EditOrganizationPaymentDetailForm:addInvoicePanel" />
                        </div>
                    </div>
                </div>
            </p:panelGrid>
        </p:dataGrid>
    </div>

我的后端java代码是:

public void removeInvoiceDetail(InvoiceDetailTO invoiceDetailTO)
{
    List<InvoiceDetailTO> invoiceDetailTOList = null;
    List<Long> deletedInvoiceDetail = null;
    try {
        invoiceDetailTOList = hrOrganizationPaymentDetailBean.getInvoiceDetailTOList();
        deletedInvoiceDetail = hrOrganizationPaymentDetailBean.getDeletedInvoiceDetailID();
        if (deletedInvoiceDetail != null && !deletedInvoiceDetail.isEmpty()) {
        } else {
            deletedInvoiceDetail = new ArrayList<Long>();

        }
        for (InvoiceDetailTO detailTO : invoiceDetailTOList) {
            if ((detailTO.getInvoiceDetailID() != null && detailTO.getInvoiceDetailID().equals(invoiceDetailTO.getInvoiceDetailID()))
                    || (detailTO.getUniqueID() != null && detailTO.getUniqueID().equals(invoiceDetailTO.getUniqueID()))) {
                detailTO.setDelete(true);
                if (invoiceDetailTO.getInvoiceDetailID() != null) {
                    deletedInvoiceDetail.add(invoiceDetailTO.getInvoiceDetailID());
                }
            }
        }

        hrOrganizationPaymentDetailBean.setInvoiceDetailTOList(invoiceDetailTOList);
        hrOrganizationPaymentDetailBean.setDeletedInvoiceDetailID(deletedInvoiceDetail);
    } catch (Exception e) {
        LOGGER_.error("", e);
    }
}

请告知我在哪里犯了错误?

1 个答案:

答案 0 :(得分:1)

问题出在<p:panelGrid rendered="#{!invoiceDetail.delete}">。即使使用rendered="false"单元格也不会在渲染后从html页面中删除。如果您在浏览器中打开调试器(按F12 for Mozilla或Chrome),您可以在<td class="ui-datagrid-column"></td>找到空单元格。因此,您需要从#{hrOrganizationPaymentDetailBean.invoiceDetailTOList}中删除已删除的项目并更新dataGrid。