2013-04-22 7 views
6

मैं प्राइमफ़ेस 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> 

मैं अपने सेवा में एक हटाने विधि है जो काम करना चाहिए लागू किया है। हालांकि, जब मैं अपने संदर्भ मेनू में डिलीट बटन दबाता हूं तो कुछ भी नहीं होता है। समस्या का कारण क्या हो सकता है? चयनित से

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

हालांकि, जब मैं आईडी प्राप्त करना चाहते हैं:

अद्यतन

मैं पीएफ पृष्ठ पर की तरह कर दिया साथ:

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

} 

और मेरे datatable पंक्ति मुझे NullPointerException मिलता है। मैं वास्तव में आपके उत्तर की सराहना करता हूं !!

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

//declare selectedRow variable + getter/setter 

से लिया अपने सेम में

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

:

+0

क्या यह एक जावा बीन विधि 'productService.delete() है;' आप अपने जेएस 'ऑनक्लिक' कॉलबैक में निष्पादित करने का प्रयास कर रहे हैं? यदि ऐसा है, तो आप इसे अपने संकेत के लिए – Daniel

उत्तर

7

यहाँ संदर्भ मेनू का उपयोग कर एक पंक्ति को हटाने के लिए एक ही रास्ता है ...

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

अपनी मेज में जोड़े है प्राइमफेस शोकेस: DataTable - ContextMenu

+0

thx की तरह नहीं कर सकते हैं। हालांकि, मैंने इसे इस तरह कार्यान्वित किया, लेकिन मुझे 'NullPointerException' मिलता है (कृपया मेरा अपडेट देखें) – maximus

+0

अपवाद कहां से आ रहा है? क्या आप यह भी पुष्टि कर सकते हैं कि जब भी आप पंक्ति को हटाने का प्रयास करते हैं तो 'selectRow' अपडेट किया जा रहा है? – Daniel

+0

अपवाद 'log.info (selectRow.getId()) से आ रहा है;' क्योंकि 'चयनित पंक्ति' 'शून्य 'है। तालिका 'आईडी' के कारण अपडेट की जानी चाहिए। हालांकि, मुझे नहीं पता कि इसका 'न्यूल' क्यों है? – maximus

संबंधित मुद्दे