2013-04-22 37 views
6

PrimeFaces 3.5を使用していて、DataTable - ContextMenuコンポーネントを実装しています。 しかし、行の1つのセルをクリックして行を削除したいとします。PrimeFacesデータテーブルの行を削除する

私のJSFページ:私は動作するはずです、私のサービスでdeleteメソッドを実装している

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

。しかし、コンテキストメニューの削除ボタンを押しても何も起こりません。問題の原因は何か?選択したからしかし

   <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を取得したい:

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

} 

と私のDataTable:

UPDATE

私はPFページ上のようにそれをやりました行はNullPointerExceptionです。私はあなたの答えを本当に感謝します!ここで

+0

はjs 'onclick'コールバックで実行しようとしているjava beanメソッド' productService.delete(); 'ですか?そうであれば、このようにすることはできません – Daniel

答えて

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 

からそれを取りました素数はショーケース:DataTable - ContextMenu

+0

あなたのヒントのためのthx。しかし、私はそれを実装しましたが、私は 'NullPointerException'を取得しました(plsは私の更新を見てください) – maximus

+0

例外はどこから来ますか?また、行を削除しようとするたびに 'selectedRow'が更新されていることを確認できますか? – Daniel

+0

'selectedRow'は' Null'なので、例外は 'log.info(selectedRow.getId());'から来ています。テーブルは 'ID'のために更新されるべきです。しかし、なぜ私はその 'NULL'を知りませんか? – maximus

関連する問題