2013-03-31 3 views
0

보기에서 많은 JPA 엔티티를 표시 할 화면을 만들어야합니다. 하나의 facelet을 만들고 거기에 필드 컬렉션을 전달하는 것이 좋습니다. List<Object>.런타임에 프로그래밍 방식으로 JSF 구성 요소를 생성하는 방법은 무엇입니까?

facelet/custom 구성 요소는 목록의 각 요소를 디스플레이 용 적절한 태그로 변환해야합니다. enum 필드를 h : selectOneMenu, String 필드를 h : inputText 등으로 바꿉니다.이 작업은 런타임에 수행해야합니다.

가장 쉬운 방법은 무엇입니까?

답변

0

이전에 저장된 구성에서 전체 페이지를 동적으로 생성 한 프로젝트에서 작업했습니다. 필요한 기본적인 두 가지가 있습니다.

  • BackingBean. 이것을 사용하여 생성 된 UIComponents의 부모 역할을 할 페이스 렛의 UIComponent에 액세스 할 수 있습니다. panelGroup과 같은 것입니다. 그러나 동적으로 생성 된 UIComponents를 추가 할 부모를 가지려면 UIComponent를 백업 빈에 바인딩해야합니다.
  • Application 구성 요소에 대한 액세스. 일반적으로 FacesContext.getApplication() (JavaEE 5에서이 작업을 했으므로 주입과 약간 다르게 보일 수 있습니다). Application 구성 요소를 만들면 createComponent 메서드를 호출하여 만들려는 구성 요소 유형을 전달합니다.

다음은 구성 요소를 동적으로 작성하고 코드에서 구성한 다음이를 바인딩 빈을 통해 정의 된 상위 UIComponent에 추가하는 활동이됩니다. 까다로울 수는 있지만 끝낼 수 있습니다.

+0

와우! 시원한! 서버 측 프로젝트에서 org.primefaces.component.toolbar.Toolbar를 사용하고 UIComponent 자식을 추가했습니다. facelet에서 나는

'하고 런타임에 전체 툴바를 생성했습니다. 이 경우 도구 모음은 각 사용자별로 고유하게 생성되어 정말 멋졌습니다. facelet에서 하나의 태그, p : toolbar가 그것을했다. 페이스 렛에서 어떻게 보이는지 설명하는 시나리오. 어떤 태그를 루트 UIComponent에 바인딩합니까? –

+0

그것은 당신이 묘사하는 것과 매우 비슷하게 보일 것이라고 생각합니다. 아마 facelet 자체에서 h : panelGroup을 사용하거나 부모 컨테이너 인 UIComponent와 같은 것을 사용할 것입니다. 바인딩 속성을 사용하여 툴바 예제에서 설명한 것과 똑같이 바인딩합니다. 프레임 워크는 UIComponent를 생성하고 backingBean에 대한 참조를 갖게됩니다. 일단 그렇게하면 자식 UIComponents를 프로그래밍 방식으로 추가 할 수 있습니다. – EdH

관련 문제