2012-02-07 2 views
0

열의 필터 필드를 사용하여 데이터 테이블을 필터링하고 필터링 된 목록 (데이터 테이블을 채 웁니다)을 가져오고 필터링 된 목록에 따라 다른 구성 요소 (Toplam TL Teminati 및 Toplam Dolar Teminati)를 업데이트하려고합니다. 내 페이지의 값.필터링 된 목록을 데이터 테이블에 가져 오기

enter image description here

는 Primefaces 2.2.1 및 JSF 2에서이 작업을 수행하려면 어쨌든 있나요? 그렇지 않다면이 사건에 대한 해결책을 추천 할 수 있습니까?

미리 감사드립니다.

+1

실제로이 작업을 자동으로 수행하는 방법은 없지만 일부 사용자 정의 필터링 논리로 비동기 업데이트 필터 단추 및 관리 대상 빈에서 데이터 개체를 필터링 한 필드와 함께 열 필터링을 사용할 수있었습니다. ' ...' –

+0

사용자 정의 필터 필드를 테이블 헤더에 넣을 수 있습니다. – lamostreta

답변

2

내 Primeface 2.2.1 dataTable에서 사용자 정의 필터 로직을 얻은 사례를 보여주기 위해 필자는 내 코드의 확장 버전을 제공하고 있습니다. 정말 관리 빈 코드, 명령 단추의 행동이 본질적으로 beans의 새 목록 데이터베이스를 다시 쿼리 내 BO 층에 필터 인수를 전달하는에 대해 너무 많은 세부 사항으로가는없이

<p:dataTable value="#{listBeans.beans}" var="bean" dynamic="true" paginator="true" rows="20" paginatorPosition="bottom" 
       emptyMessage="No Beans" loadingMessage="Loading. . ." selectionMode="single" selection="#{listBeans.selectedBean}" 
       id="beanList" widgetVar="beanTable"> 
     <f:facet name="header"> 
      <h:panelGrid columns="4"> 
       <h:outputText value="Bean List" /> 
       <p:outputPanel> 
        <h:outputText value="Year Filter: " /> 
        <h:selectOneMenu value="#{listBeans.yearFilter}" 
         onchange="yearFilterBtn.jq.click(); refreshFilters();"> 
         <f:selectItems value="#{listBeans.years}" /> 

        </h:selectOneMenu> 
        <p:commandButton id="yearFilterBtn" widgetVar="yearFilterBtn" action="#{listBeans.filterYears}" 
         update="listBeansForm:beanList" style="display:none;" /> 

       </p:outputPanel> 
       <p:outputPanel> 
        <h:outputText value="Filter By Beanchild: " /> 
        <p:inputText value="#{listBeans.beanchildFilter}" style="width: 150px; margin-right: 4px;" /> 
        <!-- refreshFilters forces the visitor filter to refresh the selection if column filters are selected. --> 
        <p:commandButton oncomplete="refreshFilters();" value="Filter" 
         action="#{listBeans.filterBeanchildren}" update="listBeansForm:beanList" /> 
       </p:outputPanel> 
       <p:commandButton value="Export to XLS" ajax="false"> 
        <p:dataExporter target="beanList" type="xls" fileName="BeanReport" 
         excludeColumns="0,5,6" postProcessor="#{listBeans.postProcessExcelReport}" /> 
       </p:commandButton> 
      </h:panelGrid> 
     </f:facet> 

     <p:column style="width:16px"> 
      <p:rowToggler /> 
     </p:column> 
     <p:column filterStyleClass="filtertag" filterBy="#{bean.beanDateDisplay}" filterMatchMode="startsWith"> 

.... 
    </p:dataTable> 

. dataTable 구성 요소의 명시적인 update은 데이터를 새로 고치는 데 필요합니다.

숨겨진 Beanchild Filter 단추에 명시되어 있듯이 refreshFilters()이라는 JavaScript 함수를 참조하는 oncomplete 특성이 있습니다. 내가 가진 문제를 정확히 기억할 수는 없지만, 컬럼 필터 값이 존재하고 비동기 업데이트가 dataTable 자체 내에서 발생하면 2.2.1 버전의 Primeface에있는 버그라고 생각합니다. 나는 열 필터 될 것이다 클래스 filtertag을 가지고 모든 DOM 요소의 위치를하고 당신은 여기에서 볼 수 있습니다

function refreshFilters() { 
    var filters = jQuery('.filtertag'); 
    var uppedOnce = false; 
    filters.each(function(idx) { 
     var curEl = jQuery(this); 
     if (curEl.val() != '') { 
      curEl.keyup(); 
      uppedOnce = true; 
     } 
    }); 

    if (!uppedOnce) { 
     jQuery(filters[0]).keyup(); 
    }   
} 

다음은 자바 스크립트 기능입니다. 나는 서버 동작이 완료된 후에 해당 필드에 값이 존재하면 keyup 이벤트를 수동으로 트리거하고 있기 때문에이 열이 이전 값과 함께 "다시 채워질"것입니다.

이후 버전의 Primefaces에서 필자가 확실하지 않은지 확신 할 수 없기 때문에 지금은 필요하지 않습니다. 따라서 자바 스크립트를 사용하지 않고이 작업을 시도해 보시기 바랍니다. 그러면 두 가지 문제를 동시에 해결할 수 있습니다. Javascript 사용을 고려할 수 있습니다.

+0

자세한 답변을 주셔서 감사합니다. 나는 한 번 시험해 볼 것이다. – lamostreta

관련 문제