2013-02-14 4 views
6

p:dataTable에 문제가있어 단일 행 선택에서 열을 제외했습니다.Primefaces : p : dataTable의 행 선택에서 열 제외

내 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

행을 클릭 할 때마다 다음 수신기를 실행하는 dataTable에 rowSelect Primefaces Ajax 이벤트가 있습니다.''# {billingService.selectBillingFileRow} "'이 메소드가 코드를 리다이렉트 또는 전달하는지 확인합니다. 페이지. –

답변

4

내 문제의 부분적인 해결책을 발견했습니다. onClick 이벤트가 발생하면 rowSelect 아약스 액션이 실행되지 않았습니다.

나는 p:commandButton에이 줄을 추가 :

onclick="event.stopPropagation();" 

내가 버튼 컬럼에 클릭이 아니라 버튼 자체에 여전히 rowSelect 조치를 실행하고 있기 때문에, 부분적으로 작동했다.

+0

다른 원시 옵션은 선택적 이벤트 인 'SelectEvent' (getComponent()에서)를 가져 와서 이벤트를 트리거하는 구성 요소의 유형을 기반으로 나머지 메소드 본문을 선택적으로 실행하는 것입니다 – kolossus

관련 문제