2013-02-14 16 views
6

Mam problem z p:dataTable i wykluczam kolumnę z wyboru w jednym wierszu.W skróty: Wyklucz kolumnę z wyboru wiersza w p: dataTable

Mam 4 kolumny w moim dataTable. Pierwsze 3 są potrzebne do wyświetlenia fileId, fileName i uploadDate. W czwartej kolumnie znajduje się przycisk polecenia dla każdego wiersza, który rozpoczyna akcję przetwarzania pliku. Ale istnieje również wybór wiersza (z akcją ajax na zdarzenie), który przechodzi do strony szczegółów pliku. Teraz, gdy klikam w dowolnym miejscu wiersza (łącznie z przyciskiem), przechodzę do strony szczegółów.

Jest mój bieżący kod:

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

I nie jest to metoda, która przechodzi do pliku stronicowania dane:

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

Czy istnieje jakiś sposób, aby wykluczyć kolumnę za pomocą przycisku z wyborem wierszy? Potrzebuję go tylko po to, aby rozpocząć przetwarzanie pliku, bez potrzeby przechodzenia do innej strony.

+0

Co przetwarzasz, czy jest to db? –

+0

Rozpoczyna przetwarzanie pliku txt za pomocą Spring Batch. – Rozart

+1

Masz wierszWybierz podstawowe zdarzenie Ajax w klasie dataTable, które wykonuje następujący program nasłuchujący za każdym kliknięciem wiersza: '" # {billingService.selectBillingFileRow} "' Sprawdziłbym kod dla tej metody, aby sprawdzić, czy przekierowuje lub przesyła dalej strona. –

Odpowiedz

4

Znalazłem częściowe rozwiązanie mojego problemu. Zapobiegłem wykonaniu akcji ajaxowej rowSelect po wystąpieniu zdarzenia onClick.

Dodałem tę linię do p:commandButton:

onclick="event.stopPropagation();" 

powiedziałem to działa częściowo, ponieważ kliknięcie na kolumnie z przycisku, ale nie na samym przycisku, nadal wykonuje rowSelect działania.

+0

Inną surową opcją będzie selektywne pobranie źródła 'SelectEvent' (z' getComponent() ') i wybiórcze wykonanie reszty treści metody w oparciu o typ komponentu, który wyzwala zdarzenie – kolossus

Powiązane problemy