런타임에 모든 사용자 정의 컨트롤 요소는 UIIncludeComposite 클래스의 인스턴스가됩니다. 따라서 사용자는 주어진 컨트롤 인스턴스에 대해 호출 할 수있는 메서드가 많이 있지만 사용자 지정 속성 대신 사용자 지정 메서드를 지정할 방법이 없습니다. (this NotesIn9 episode이 과정에 가장 간단한 방법을 설명합니다)
이 구성 요소에 사용자 지정 컨트롤을 변환 :
이있다, 그러나, 당신은 결과를 얻을 수 있습니다 적어도 두 가지 방법으로 당신이 후입니다. Designer에서 생성 한 클래스를 NSF를 빌드 할 때마다 재정의하지 않는 클래스로 마이그레이션 한 후에는 다음 빌드에서 다시 초기화하도록 두려움없이 사용자 정의 메소드를 추가 할 수 있습니다. 사용자 정의 컨트롤은 본질적으로 JSF 2.0의 "복합 컴포넌트"개념을 구현 한 것일 뿐이므로 기존 사용자 정의 컨트롤과 동일한 동작을하지만 사용자 정의 동작을 지원하는 구성 요소를 처음부터 새로 만들 수도 있습니다. 두 방법 모두 OSGi 라이브러리를 반드시 생성 할 필요는 없습니다 ... NSF에서 직접 이러한 구성 요소를 정의 할 수 있습니다. 여러 파일을 각각 복사 할 필요없이 여러 NSF에 걸쳐 파일을 재사용하려면 라이브러리에 밀어 넣기 만하면됩니다.
컨트롤의 사용자 지정 속성에 API 개체를 허용하는 속성 하나를 포함하십시오. 즉, 정의하려는 사용자 정의 메소드를 지원하는 모든 오브젝트 (예 : Java 클래스 또는 SSJS 오브젝트)를 작성하고 이 오브젝트를 제어에 전달할 수 있습니다. 그런 다음 CC의 속성 맵을 통해 개체에 대한 핸들을 가져 와서 이러한 메서드를 호출 할 수 있습니다. 예를 들어
:
<myCC id="myCustomControl" API="#{someObject}" />
{여기서 someObject는}에 해결 무엇 # 가정은 쇼() 메소드는, 당신은에 전달 된 인스턴스에 대한 핸들을 얻어서 그 메소드를 호출 할 수 있습니다 포함 제어 : 객체 자체가가 전달 된 사용자 지정 컨트롤을 인식하지 않기 때문에 위의 예에서
var cc = getComponent("myCustomControl");
var ccProperties = cc.getPropertyMap();
var ccAPI = ccProperties.get("API");
ccAPI.show(cc);
, 나는 쇼() 메소드로 실제 사용자 지정 컨트롤을 전달하고있다. 따라서 해당 메소드가 렌더링 된 속성을 토글하기 위해 자식에 핸들을 가져와야하는 경우, 예를 들어 컨텍스트를 결정하는 다른 방법이 필요합니다.
내 질문을 다시 게시하고 다른 방식으로 진행할 것 같습니다. 도와 주셔서 감사합니다. –