2011-11-07 2 views
1

기본값을 발사 할 열 중 하나에 "valueChangeListener을"중지 : selectionListener="#{bindings.IterBinding.collectionModel.makeCurrent}"ADF의 AF : 테이블 프로그램 "selectionListener"는 AF에 대해 "selectionListener"속성의

하지만 경우 : 테이블 구성 요소는 일반적으로 다음과 같습니다 특별한 선택 처리가 필요합니다. 일반적으로 선택 이벤트에 대한 사용자 정의 핸들러를 지정할 수 있습니다. 이 사용자 지정 처리기의 첫 번째 단계로 현재 행을 만들기위한 기본 기능이 프로그래밍 방식으로 호출됩니다. 다음 코드 조각처럼 보일 수 있습니다.

public void testSelectionListener(SelectionEvent selectionEvent) {   
    JSFUtils.resolveMethodExpression("#{bindings.IterBinding.collectionModel.makeCurrent}", null, 
            new Class[]{SelectionEvent.class}, new Object[]{selectionEvent});   
} 

이 코드는 표준 선택 핸들러와 똑같이 작동해야합니다.
하지만 그렇지 않습니다.
테이블 열 중 하나에서 선택 상자를 눌러 선택 변경을 트리거하면이 af : selectBooleanCheckbox의 "valueChangeListener"가이 경우에 발생하지 않습니다. 두 번 클릭하면 시작됩니다. 기본 "selectionListener"를 사용하면 항상 예상대로 발생합니다.

사용자 정의 처리기에 어떤 문제가 있습니까?

답변

4

좋아,이 이상한 행동에 대한 범인이 발견되었습니다.
페이지 마크 업을 편집하는 동안 JDeveloper는 pageDef 파일의 반복기 바인딩에 대한 "ChangeEventPolicy"속성 값을 "default (none)"에서 "ppr"으로 변경했습니다.
이로 인해 이상한 동작이 발생합니다.
수동으로 원래 값으로 되돌려도 모든 것이 예상대로 작동합니다.
"ppr"설정이 꽤 버그가있는 것처럼 보입니다. 나는 이미 af : panelTabbed와 유사한 문제가 있었는데, 때때로 탭 사이를 전환 할 때 신비한 오류 메시지가 나타납니다.

0

코드 아래에 시도하십시오 :

public void onTableSelect(SelectionEvent selectionEvent) { 

    // --- perform optional pre-processing here --- // 

    RichTable _table = (RichTable) selectionEvent.getSource(); 
    CollectionModel model = (CollectionModel) _table.getValue(); 
    JUCtrlHierBinding _binding = (JUCtrlHierBinding) model.getWrappedData(); 
    DCIteratorBinding iteratorBinding = _binding.getDCIteratorBinding(); 
    Object _selectedRowData = _table ́.getSelectedRowData(); 
    JUCtrlHierNodeBinding node = (JUCtrlHierNodeBinding) _selectedRowData ; 
    Key rwKey = node.getRowKey(); 
    iteratorBinding.setCurrentRowWithKey(rwKey.toStringFormat(true)); 

    // --- perform optional post-processing here --- // 
} 
관련 문제