2013-02-14 46 views
6

मुझे p:dataTable और एकल पंक्ति चयन से कॉलम को छोड़कर समस्या है।प्राइमफ़ेस: पी में पंक्ति चयन से कॉलम को बहिष्कृत करें: डेटाटेबल

मेरे डेटा में 4 कॉलम हैं। FileId, fileName और uploadDate को प्रदर्शित करने के लिए पहले 3 की आवश्यकता है। चौथे कॉलम में प्रत्येक पंक्ति के लिए एक कमांड बटन होता है जो फ़ाइल प्रोसेसिंग की क्रिया शुरू करता है। लेकिन पंक्ति चयन (घटना पर AJAX कार्रवाई के साथ) भी है जो फ़ाइल विवरण पृष्ठ पर नेविगेट करता है। अब, जब मैं पंक्ति पर कहीं भी क्लिक करता हूं (बटन सहित) यह मुझे विवरण पृष्ठ पर नेविगेट करता है।

वहाँ मेरे वर्तमान कोड है:

<h:form> 
    <p:dataTable id="billingFiles" value="#{billingFiles}" 
     var="billingFile" 
     rowKey="#{billingFile.billingFile.idBillingFile}" 
     filteredValue="#{billingService.filteredBillingFileDataModels}" 
     selectionMode="single" paginator="true" rows="10"> 

     <p:ajax event="rowSelect" listener="#{billingService.selectBillingFileRow}" /> 

     <p:column sortBy="#{billingFile.id}" 
      filterBy="#{billingFile.id}" id="idFile" 
      headerText="#{msg['billing.file.id']}" 
      filterMatchMode="contains"> 
      <h:outputText value="#{billingFile.id}" /> 
     </p:column> 

     <p:column sortBy="#{billingFile.uploadDate}" 
      filterBy="#{billingFile.uploadDate}" id="uploadDate" 
      headerText="#{msg['billing.file.upload_date']}" 
      filterMatchMode="contains"> 
      <h:outputText value="#{billingFile.uploadDate}" /> 
     </p:column> 

     <p:column sortBy="#{billingFile.fileName}" 
      filterBy="#{billingFile.fileName}" id="fileName" 
      headerText="#{msg['billing.file.file_name']}" 
      filterMatchMode="contains"> 
      <h:outputText value="#{billingFile.fileName}" /> 
     </p:column> 

     <p:column id="loadBillingFile"> 
      <p:commandButton id="loadBillingFileButton" 
       rendered="#{billingFile.fileStatus.equals('UPLOADED')}" 
       value="#{msg['billing.load_billing_file']}" 
       action="#{billingService.loadBillingFile(billingFile.billingFile)}" 
       update=":form" /> 
     </p:column> 
    </p:dataTable> 
</h:form> 

और वहाँ विधि विवरण पृष्ठ फाइल करने के लिए नेविगेट करता है जो:

public void selectBillingFileRow(SelectEvent event) { 
    BillingFileDataModel billingFileDataModel = (BillingFileDataModel) event.getObject(); 
    if (billingFileDataModel != null) { 
     selectedBillingFile = billingFileDAO.findBillingFileById(billingFileDataModel.getBillingFile().getIdBillingFile()); 
     FacesContext.getCurrentInstance().getExternalContext() 
     .getRequestMap().put(JsfView.EVENT_KEY, "viewBillingFile"); 
    } 
} 

वहाँ पंक्ति चयन से बटन के साथ स्तंभ को बाहर करने का कोई तरीका है? मुझे इसे अन्य पेज पर नेविगेट किए बिना फ़ाइल को प्रोसेस करना शुरू करने की आवश्यकता है।

+0

आप किस फाइल को संसाधित करते हैं, क्या यह एक डीबी है? –

+0

यह स्प्रिंग बैच के साथ txt फ़ाइल को प्रोसेस करना शुरू करता है। – Rozart

+1

आपके पास एक पंक्ति है प्राइमफ़ेस अजाक्स ईवेंट डेटा पर चयन करें जब भी आप किसी पंक्ति पर क्लिक करते हैं तो निम्न श्रोता निष्पादित करता है: '" # {billingService.selectBillingFileRow} "'मैं इस विधि के लिए कोड देखता हूं कि यह रीडायरेक्ट कर रहा है या अग्रेषित कर रहा है या नहीं पृष्ठ। –

उत्तर

4

मुझे मेरी समस्या का आंशिक समाधान मिला। मैंने निष्पादन से AJAX कार्रवाई को रोक दिया, जब onClick घटना होती है।

मैं p:commandButton को यह लाइन कहा:

onclick="event.stopPropagation();" 

मैं ने कहा कि यह आंशिक रूप से काम करता है, क्योंकि बटन के साथ स्तंभ पर क्लिक करें, लेकिन बटन पर ही नहीं, अभी भी rowSelect कार्रवाई निष्पादित करता है।

+0

एक और कच्चे विकल्प को चुनिंदा रूप से 'सिलेक्टवेन्ट' ('getComponent() 'से) का स्रोत प्राप्त करना होगा और ईवेंट के ट्रिगर करने वाले घटक के प्रकार के आधार पर शेष विधि निकाय को चुनिंदा रूप से निष्पादित करना होगा। – kolossus