2014-09-02 4 views
1

나는 3 개의 필드와 1 개의 리치 텍스트 필드를 가진 간단한 문서를 가지고있다. 또한 xpage에는 3 개의 간단한 편집 상자 컨트롤과 1 개의 리치 텍스트가 있습니다. 내 NotesXSPDocument의 이름은 document1입니다.xsp 문서의 모든 구성 요소를 xpages로 가져올 수 있습니까?

질문 1 : xsp 문서의 모든 컨트롤이있는 벡터를 가져올 수 있습니까? 예를 들어, 사용하는 대신 getComponent("fld1")getComponent("fld2")는 ... 등, 내가 getAllComponents() 또는 document1.getControls() 같은 것을 사용할 수 있습니까? 이러한 방법은 물론 존재하지 않기 때문에 내가 할 수있는 방법이 있는지 묻습니다. document1.getDocument().getItems()을 호출하여 문서 (XSP 아님)의 모든 항목을 가져올 수 있음을 알고 있습니다. xsp와 비슷한 점이 있습니까?

질문 2 : 위에서 설명한대로 벡터를 얻을 수 있다고 가정 해 보겠습니다. 다음이 벡터를 통해 반복하여 각 컨트롤의 값을 가져 오는 경우 서식있는 텍스트 또는 간단한 텍스트 필드인지 확인하는 방법이 있습니까?

+0

왜 내가 Xpage에서 모든 구성 요소를 가져 오길 원하는지 궁금합니다. 그 필요성/유스 케이스는 무엇입니까? 내가 문서에 getItems에 대한 드문 필요성을 볼 수 있지만 당신이 왜 Xpage에있는 모든 구성 요소를 원할지 모르겠다. –

+0

Gmail의 "초안으로 자동 저장"과 같은 기능을하는 모듈을 만들었습니다. 편집 할 문서를 열 때 필드에 변경 사항이 있는지 정기적으로 확인합니다. 필드를 하나씩 가져 와서 구현했지만 더 추상적이고 재사용 가능하게 만들고 싶습니다. –

+0

필드 차이 클라이언트 측을 확인한 다음 서버 측 저장을 트리거하는 것이 더 좋을 수 있습니다. 특히 "주기적으로"변경 사항을 폴링하려는 경우가 그렇습니다. –

답변

3

A는 복잡한 비트하지만 예. facesContext.getViewRoot()은 UIViewRoot 객체이므로 자식을 반환하는 메서드는 List<UIComponent> getChildren()입니다.

그러나 트리 구조이므로 일부 자식에는 추가 자식 구성 요소가 있습니다. 보려는 구성 요소의 목록을 작성하려면 전체 트리를 탐색해야합니다.

이 유형의 경우 구성 요소는 클래스에 의해 어떤 종류를 결정할 수 있습니다. 예를 들어 UIInput은 텍스트 상자 등입니다.

4

기술적으로는 그렇지만 쉽지는 않습니다.이 문제는 해결하려는 근본적인 문제에 접근하는 더 좋은 방법이 될 수 있습니다.

그럼에도 불구하고 페이지에서 입력 목록을 얻으려는 경우 XspQuery는 친구 : http://avatar.red-pill.mobi/tim/blog.nsf/d6plinks/TTRY-96R5ZT입니다. 이를 통해 "locateInputs"를 사용하여 페이지의 모든 입력 목록을 가져온 다음 값 메서드 바인딩을 검사하여 문자열 버전이 변수 이름을 참조하는지 확인합니다. 오류가 발생하기 쉽고 예쁜 것은 아니지만 작동 할 것입니다. 그것들은 속성 바인딩이기 때문에, 거기에있는 startsWith 필터가 당신이 원하는 것을 할 것이라고 생각하지 않습니다.

또는 구성 요소를 Java 클래스의 무언가에 처음부터 바인딩 할 수 있습니다. 나는 최근에 (다른 목적으로) 그런 일을하고 있었고 처음에는 여기에 설명했다 : https://frostillic.us/f.nsf/posts/my-black-magic-for-the-day. 결과적으로 바인딩 속성을 수행하는 방법에 대한 올바른 영리함을 통해 주어진 객체의 속성을 참조하는 모든 구성 요소의 목록을 얻을 수 있습니다.

질문의 두 번째 부분에서, 구성 요소에 대한 핸들을 다른 방법으로 얻는다면 "구성 요소 instanceof com.ibm.xsp.UIInputRichText"를 수행하여 서식있는 텍스트 제어인지 확인할 수 있습니다 ".