2014-10-23 4 views
0

필자는 SelectableListTableContentProvider를 사용하여 테이블을 채우는 웹 서비스를 가지고있다.webMethods CAF에서 서버에 필터하는 필터가있는 테이블을 만드는 방법은 무엇입니까?

그러나 필터 입력 컨트롤을 테이블에 추가하면 클라이언트 쪽의 현재 테이블 내용에 필터가 적용됩니다. 즉, 테이블의 10 페이지 중 하나에있는 경우 필터가 입력되지 않습니다. 1 페이지의 값만 확인하십시오.

웹 서비스에서 반환 할 수있는 모든 값에 대해 필터 입력 컨트롤 필터를 만들려면 어떻게해야합니까? 여기

답변

2

는 당신이 그것을 할 방법은 다음과 같습니다

  1. 만들기를 당신이 SelectableListTableContentProvider이 (의이 myDataProvider를 부르 자), 그리고 모든 물건 웹 서비스 공급자와 화면 사이에 작동하는지 확인 말하는 것처럼. 이것은 실수가있는 경우를 대비하여 다음 비트가 제대로 작동하지 않을 수 있습니다. 정상적으로 보이는지, 데이터를 올바르게 페이지로 보내고 있는지 등을 확인하십시오. 테이블에 멋진 ID를 지정하십시오.

  2. 필터 입력 컨트롤을 화면에 추가하십시오. For 속성을 테이블의 ID로 설정하십시오.

  3. myDataProvider의 유형을 SelectableListTableContentProvider에서 FilterableSelectableListTableContentProvider으로 변경하십시오. 그 게터에서 두 장소에서

    SelectableListTableContentProvider myDataProvider; 
    

    :

    public com.webmethods.caf.faces.data.object.SelectableListTableContentProvider getMyDataProvider() { 
        if (myDataProvider == null) { 
        metadataOrganisationProvider = (com.webmethods.caf.faces.data.object.SelectableListTableContentProvider)resolveExpression("#{myDataProvider}"); 
        } 
    
        resolveDataBinding(MYDATAPROVIDER_PROPERTY_BINDINGS, myDataProvider, "myDataProvider", false, false); 
        return myDataProvider; 
    } 
    

    및 관리 빈의 설정에 faces-config.xml에서 :

    <managed-bean> 
    <managed-bean-name>myDataProvider</managed-bean-name> 
    <managed-bean-class>com.webmethods.caf.faces.data.object.SelectableListTableContentProvider</managed-bean-class> 
    <managed-bean-scope>session</managed-bean-scope> 
    <managed-property> 
        <description>Specifies whether the session bean expires when the pageflow is out of scope</description> 
        <display-name>Expire With Page Flow</display-name> 
        <property-name>expireWithPageFlow</property-name> 
        <property-class>java.lang.Boolean</property-class> 
        <value>true</value> 
    </managed-property> 
    

    당신은 변수의 선언을 수행해야합니다

    각 예제에서 나는 무엇이 보이는지 보여줍니다. 보다변경되었습니다. 단어 FilterSelectableListTableContentProvider 앞에 추가하십시오.

    이제 필터링 할 수있는 콘텐츠 제공 업체가 생겼습니다.

  4. 실행하려고하면 화면에 오류가 발생합니다. 왜? 좋은 질문. 왜, Software AG입니까? 왜 현명한 기본값을 제공하지 않는가? 모든 것을 필터링하는 기본값 인 클라이언트 측 필터 입력 컨트롤의 out of the box 동작과 달리 필터링 할 필드를 선택해야하는 이유는 무엇입니까?

    어쨌든. 바인딩 창에서 필터링 가능한 공급자를 엽니 다. 조금이라도 이상하게 보입니다. 왜냐하면 나는 그들이 이것을 할 수있을만큼 잘 구성했다고 생각하지 않기 때문입니다. Row Filter Value Binding 속성을 선택합니다 (해당 아이콘은 상자에 *로 표시되며 문자열이 아닌 이유는 알지 못함). 데이터 바인딩 속성은 공급자의 올바른 필드 인이되도록 컨트롤 범위 변수이되도록 설정하십시오.

    그건 의미가 없나요? 좋아, 내가 깰거야 :

    1. WYSIWYG보기 건에서 테이블을 클릭하십시오. 테이블의 행이 아니라 전체 테이블 이 상태가 선택되어 있는지 확인하고 실수로 선택을 취소하지 마십시오.
    2. 바인딩 창의 공급자 아래 Row Filter Value Binding을 클릭하십시오.
    3. 속성 창에서 데이터 바인딩 탭으로 이동하여 #{...} 단추를 클릭하여 원하는 값을 찾습니다.
    4. 팝업이 열리면 상단으로 스크롤하고 Controls Scoped Variables 섹션을 엽니 다. 이것이 존재하지 않으면, a)로 돌아가서 제대로하십시오 :)
    5. 필터링 할 값을 선택하십시오.
    6. 괜찮아요. 필드는 다음과 같습니다 뭔가에 바인딩됩니다

      #{result.nameOfFieldToFilterOn} 
      

배포 및 :)

을 즐길 수