2013-02-14 13 views
6

Ho un problema con p:dataTable ed escluso una colonna dalla selezione di una singola riga.Primefaces: esclude la colonna dalla selezione di righe in p: dataTable

Ho 4 colonne nel mio dataTable. I primi 3 sono necessari per visualizzare fileId, fileName e uploadDate. Nella quarta colonna c'è un pulsante di comando per ogni riga che avvia l'azione di elaborazione dei file. Ma c'è anche la selezione delle righe (con azione Ajax sull'evento) che si sposta nella pagina dei dettagli del file. Ora, quando clicco su un punto qualsiasi della riga (incluso il pulsante), viene visualizzata la pagina dei dettagli.

Ecco il mio codice corrente:

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

e non v'è il metodo che naviga su file pagina dei dettagli:

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

Esiste un modo per escludere colonna con il pulsante dalla selezione di fila? Ne ho bisogno solo per iniziare l'elaborazione del file, senza spostarmi verso un'altra pagina.

+0

Che file stai elaborando, è un db? –

+0

Inizia l'elaborazione del file txt con Spring Batch. – Rozart

+1

Hai un evento rowSelect Primefaces Ajax sul dataTable che esegue il seguente listener ogni volta che fai clic su una riga: "" # {billingService.selectBillingFileRow} "' Vorrei cercare nel codice questo metodo per vedere se sta reindirizzando o inoltrando il pagina. –

risposta

4

Ho trovato una soluzione parziale al mio problema. Ho impedito l'azione rowSelect ajax dall'esecuzione, quando si verifica l'evento onClick.

ho aggiunto questa linea a p:commandButton:

onclick="event.stopPropagation();" 

ho detto che funziona in parte, perché il clic sulla colonna con il pulsante, ma non sul pulsante stesso, esegue ancora rowSelect azione.

+0

Un'altra opzione grezza sarà quella di ottenere selettivamente il sorgente di "SelectEvent' (da' getComponent() ') e di eseguire selettivamente il resto del corpo del metodo in base al tipo di componente che attiva l'evento – kolossus

Problemi correlati