2013-04-22 65 views
6

我正在使用PrimeFaces 3.5,並且正在實施DataTable - ContextMenu組件。 但是,我想通過單擊行中的一個單元格來刪除一行。在PrimeFaces數據表中刪除行

我的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> 

我已經實現了我的服務的刪除方法,它應該工作。但是,當我按下我的上下文菜單中的刪除按鈕時,沒有任何反應。問題的原因是什麼?

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

} 

,我的數據表:

UPDATE

我做了它喜歡上了PF頁

   <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。我真的很感謝你的回答!

+0

它是一個java bean方法'productService.delete();'你試圖在你的js'onclick'回調中執行?如果是這樣,你不能像這樣做 – Daniel 2013-04-22 12:00:42

回答

7

下面是一個使用上下文菜單刪除行的一種方式......

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

添加到您的表:

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

在你的bean

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

//declare selectedRow variable + getter/setter 

把它從primefaces展示:DataTable - ContextMenu

+0

thx爲你的提示。但是,我這樣實現它,但我得到一個'NullPointerException'(請參閱我的更新) – maximus 2013-04-22 15:20:48

+0

哪裏是異常來自?你是否還可以確認每次嘗試刪除一行時都會更新'selectedRow'? – Daniel 2013-04-22 15:23:02

+0

異常來自'log.info(selectedRow.getId());'因爲'selectedRow'是'Null'。該表應該由於'IDs'而被更新。但是,我不知道爲什麼它的'NULL'? – maximus 2013-04-22 15:28:20