8

我正在使用 PrimeFaces 3.5,并且正在实现DataTable - ContextMenu组件。但是,我想通过单击行中的一个单元格来删除一行。

我的 JSF 页面:

<h:form id="form">

    <p:growl id="messages" showDetail="true" />

    <p:contextMenu for="productID" widgetVar="cMenu">
        <p:menuitem value="Edit Cell" icon="ui-icon-search"
                    onclick="productService.showCellEditor();return false;" />
        <p:menuitem value="Delete Row" icon="ui-icon-search"
                    onclick="productService.delete();return false;" />
    </p:contextMenu>

    <p:dataTable id="productID" var="product"
                 value="#{productService.getListOrderedByDate()}"
                 editable="true" editMode="cell" widgetVar="productTable"
                 paginator="true" rows="10"
                 paginatorTemplate="{CurrentPageReport}  {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
                 rowsPerPageTemplate="5,10,15">

        <f:facet name="header"> Airbnb Product  </f:facet>

        <p:ajax event="cellEdit"
                listener="#{productService.onCellEdit}"
                update=":form:messages" />

        <p:column headerText="id" style="width:15%">
            <p:cellEditor>
                <f:facet name="output">
                    <h:outputText value="#{product.id}" />
                </f:facet>
                <f:facet name="input">
                    <p:inputText value="#{product.id}" style="width:96%" />
                </f:facet>
            </p:cellEditor>
        ...
        </p:column>
    </p:dataTable>
</h:form>

我在我的服务中实现了一个删除方法,它应该可以工作。但是,当我按下上下文菜单中的删除按钮时,什么也没有发生。问题的原因可能是什么?

更新

我在 PF 页面上这样做了:

public void delete() {
    log.info("Deleting data:");
    log.info(selectedRow.getId());
//  productDAO.delete(selectedRow);

}

和我的数据表:

                <p:contextMenu for="productID" widgetVar="cMenu">
                    <p:menuitem value="Edit Cell" icon="ui-icon-search"
                        onclick="productService.showCellEditor();return false;" />
                    <p:menuitem value="Delete" update="productID" icon="ui-icon-close"
                        actionListener="#{productService.delete}" />
                </p:contextMenu>

                <p:dataTable id="productID" var="product"
                    value="#{productService.getListOrderedByDate()}"
                    editable="true" editMode="cell" widgetVar="productTable"
                    paginator="true" rows="10"
                    paginatorTemplate="{CurrentPageReport}  {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
                    rowsPerPageTemplate="5,10,15"
                    selection="#{productService.selectedRow}" selectionMode="single" rowKey="#{product.id}">

但是,当我想从选定的行中获取 ID 时,我得到一个NullPointerException. 我真的很感谢你的回答!!

4

1 回答 1

7

这是使用上下文菜单删除行的一种方法...

<p:menuitem value="Delete" update="productID" icon="ui-icon-close" action="#{productService.delete}"/>  

添加到您的表中:

<p:dataTable selection="#{productService.selectedRow}" selectionMode="single"....

在你的豆子里

public void delete() {  
    carsSmall.remove(selectedRow);  
}  

//declare selectedRow variable + getter/setter

从 primefaces 展示中获取它:DataTable - ContextMenu

于 2013-04-22T12:06:07.247 回答