2012-04-09 6 views
1

나는 사용자 지정 컨트롤을 사용하여 사용자 지정 속성을 잘 사용하고 있습니다. 커스텀 메소드와 같은 것이 있습니까? CC에서 어떤 일이 일어나기를 원한다고 가정 해보십시오. 좋은 예는 대화 상자 확장의 show 메소드입니다. 내부에 확장 대화 상자가있는 참조가있는 경우 확장 프로그램 페이지 구두 도구에서 최종 사용자 프로그래머를 보호하는 표시 방법을 사용자 지정 컨트롤에 지정해야합니다.사용자 지정 컨트롤 사용자 지정 메서드?

어쨌든 이것을 할 수 있습니까?

답변

4

런타임에 모든 사용자 정의 컨트롤 요소는 UIIncludeComposite 클래스의 인스턴스가됩니다. 따라서 사용자는 주어진 컨트롤 인스턴스에 대해 호출 할 수있는 메서드가 많이 있지만 사용자 지정 속성 대신 사용자 지정 메서드를 지정할 방법이 없습니다. (this NotesIn9 episode이 과정에 가장 간단한 방법을 설명합니다)

  1. 이 구성 요소에 사용자 지정 컨트롤을 변환 :

    이있다, 그러나, 당신은 결과를 얻을 수 있습니다 적어도 두 가지 방법으로 당신이 후입니다. Designer에서 생성 한 클래스를 NSF를 빌드 할 때마다 재정의하지 않는 클래스로 마이그레이션 한 후에는 다음 빌드에서 다시 초기화하도록 두려움없이 사용자 정의 메소드를 추가 할 수 있습니다. 사용자 정의 컨트롤은 본질적으로 JSF 2.0의 "복합 컴포넌트"개념을 구현 한 것일 뿐이므로 기존 사용자 정의 컨트롤과 동일한 동작을하지만 사용자 정의 동작을 지원하는 구성 요소를 처음부터 새로 만들 수도 있습니다. 두 방법 모두 OSGi 라이브러리를 반드시 생성 할 필요는 없습니다 ... NSF에서 직접 이러한 구성 요소를 정의 할 수 있습니다. 여러 파일을 각각 복사 할 필요없이 여러 NSF에 걸쳐 파일을 재사용하려면 라이브러리에 밀어 넣기 만하면됩니다.

  2. 컨트롤의 사용자 지정 속성에 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); 

, 나는 쇼() 메소드로 실제 사용자 지정 컨트롤을 전달하고있다. 따라서 해당 메소드가 렌더링 된 속성을 토글하기 위해 자식에 핸들을 가져와야하는 경우, 예를 들어 컨텍스트를 결정하는 다른 방법이 필요합니다.

+0

내 질문을 다시 게시하고 다른 방식으로 진행할 것 같습니다. 도와 주셔서 감사합니다. –

0

개체를 전달하는 Tim의 솔루션은 그 좋은 해결책입니다.

내 머리 속으로 튀어 나온 것만으로도 컨트롤의 렌더링 된 속성과 비슷한 속성을 쉽게 만들 수 있습니다. 값을 전달하고 사용자 정의 컨트롤 내부에서 값을 기반으로 무언가를 수행합니다. true이면 표시 대화 상자, 그렇지 않으면 XPage에서 런타임 중에이 값을 수정하고 컨트롤을 부분적으로 새로 고치면 논리가 다시 실행되고 컨트롤이 표시됩니다.

0

또 다른 솔루션은 맞춤 컨트롤 인스턴스의 ID를 전달해야하는 기능 (맞춤 컨트롤 메소드)을 제공하는 맞춤 컨트롤에 JavaScript 라이브러리를 포함 할 수 있습니다.

+0

이것은 흥미 롭습니다. 어떻게 할 수 있습니까? 내 xPage에 동일한 CC가 4 번 있다고 가정 해 보겠습니다. 특정 CC에 대해 메소드를 호출 할 수 있습니까? –