2013-02-14 5 views
6

Ich habe ein Problem mit p:dataTable und eine Spalte aus der einzelnen Zeile Auswahl ausgeschlossen.Primefaces: Spalte aus Zeilenauswahl in p ausschließen: dataTable

Ich habe 4 Spalten in meiner Datentabelle. Die ersten 3 werden benötigt, um fileId, fileName und uploadDate anzuzeigen. In der 4. Spalte befindet sich eine Befehlsschaltfläche für jede Zeile, die die Aktion der Dateiverarbeitung startet. Aber es gibt auch eine Zeilenauswahl (mit AJAX-Aktion bei Ereignis), die zur Dateidetailseite navigiert. Jetzt, wenn ich auf die Stelle in der Zeile (einschließlich der Schaltfläche) klicke, navigiert es mich zur Detailseite.

Es ist mein aktueller Code:

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

Und es ist die Methode, die Detailseite Datei navigiert:

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

Gibt es eine Möglichkeit Spalte mit der Taste aus Zeilenauswahl auszuschließen? Ich brauche es nur, um die Datei zu bearbeiten, ohne mich zu einer anderen Seite zu navigieren.

+0

Was für eine Datei verarbeitest du, ist es eine db? –

+0

Es beginnt die Verarbeitung der TXT-Datei mit Spring Batch. – Rozart

+1

Sie haben ein RowSelect Primefaces-Ajax-Ereignis in der dataTable, das den folgenden Listener ausführt, wenn Sie auf eine Zeile klicken: '" # {billingService.selectBillingFileRow} "' Ich würde im Code nach dieser Methode suchen, um zu sehen, ob es umleitet oder weiterleitet Seite. –

Antwort

4

Ich fand eine Teillösung für mein Problem. Ich verhinderte rowSelect Ajax-Aktion ausgeführt werden, wenn onClick Ereignis auftritt.

Ich habe diese Zeile p:commandButton:

onclick="event.stopPropagation();" 

Ich sagte, es funktioniert teilweise, weil Klick auf Spalte mit der Taste, aber nicht auf der Schaltfläche selbst führt noch rowSelect Aktion.

+0

Eine weitere einfache Option besteht darin, selektiv die Quelle des 'SelectEvent' (aus' getComponent() ') zu erhalten und den Rest des Methodenrumpfs basierend auf dem Typ der Komponente, die das Ereignis auslöst, selektiv auszuführen – kolossus

Verwandte Themen