2013-05-30 5 views
6

복합 구성 요소를 사용자 지정 구성 요소로 마이그레이션해야합니다. 이 예제는 다소 단순화되었지만 문제를 보여줍니다. 즉, 내 구성 요소의 하위 항목 (my:test)을 다른 구성 요소에 렌더링해야합니다. 복합 my:testC, 내가 사용하지 않을 예를 들어, 나는 단순히 p:panelencodeBegin에 렌더링 할 수없는 (나는이 가정에 올바른있어 희망 적어도) 분명히이복합 구성 요소를 사용자 지정 구성 요소로 마이그레이션

<composite:implementation> 
    <p:panel> 
    <composite:insertChildren/> 
    </p:panel> 
</composite:implementation> 

과 같을 것이다 . PrimeFaces 패널에서 렌더링 일부 텍스트을 :

<my:test> 
    <h:outputText value="some Text"/> 
</my:test> 

출력은 my:testC를 사용하는 것보다 동일해야합니다 :

@FacesComponent("test") 
public class Test extends UIPanel 
{ 
    @Override 
    public void encodeBegin(FacesContext context) throws IOException 
    { 
    // ?? 
    } 

    @Override 
    public void encodeEnd(FacesContext context) throws IOException 
    { 
    // ?? 
    } 
} 

는이 같은 방식으로 my:test을 사용하고 싶습니다. Java 클래스에서 p:panel의 사용을 어떻게 인코딩 할 수 있습니까?

+0

구체적인 문제/질문을 이해하지 못합니다 (사실 구체적인 질문이 없습니다). 사용자 정의 구성 요소에 동일한 출력 인 ''을 인코딩하는 방법을 구체적으로 묻고 있습니까? 아니면 해당 부분에 기본 인코더 (렌더러) 인 ''을 재사용하는 방법을 구체적으로 묻고 있습니까? 'encodeChildren()'이 자동적으로 모든 것을 처리하기 때문에 아이들은 전혀 문제가되지 않습니다. 첫 단락의 마지막 문장은 그렇지 않다는 것을 나타내는 것처럼 보입니다. 혼란 스럽습니다. – BalusC

+0

@BalusC이 문제를 조사해 주셔서 감사합니다. 나는 질문을 업데이 트했습니다, 잘하면 지금 이해하는 것이 좋습니다. 귀하의 질문에 대답하기 위해 : 나는'p : panel'의 동일한 출력을 인코딩하려고합니다. – Thor

답변

0

올바르게 관찰했습니다. 사용자 정의 구성 요소에서 단순히 "p : panel"또는 다른 jsf 마크 업을 렌더링 할 수 없습니다.

당신이 그러나 할 수있는 일 :

  • 이 응용 프로그램의 인스턴스를 사용하여 하위 구성 요소를 인스턴스화 사용자 정의 구성 요소에 대한면 또는 자녀로 추가 한 후 자신의 렌더러에에 인 코드를 호출합니다.

  • 직접 HTML

  • 사용하여 현재 JSF에서 사용할 수 있어야 facelet API (내가 실제로 그와 함께 일한 적이있다)

  • 사용 속도 또는 프리 마커와 같은 다른 템플릿 처리를 렌더링하는 렌더링 HTML.