2012-02-20 6 views
2

렌더링 중에 하위 컴포넌트를 추가 할 수 있습니까? JSF 1.2 환경에서 하위 구성 요소를 동적으로 추가하는 것이 가장 좋은 방법은 무엇입니까? 감사합니다렌더링시 JSF 컴포넌트 삽입/추가

+0

구체적인 예가 있습니까? –

+0

기본적으로 변수를 사용하는 변수를 만드는 구성 요소를 만들려고합니다. 그 값이 참이라면 구성 요소 내부에 하위 입력을 추가하여 입력을 사용하여 입력과 div가됩니다. 렌더러 클래스를 상위 구성 요소의 렌더러에서 렌더링하는 대신 렌더링합니다. –

+0

Seam을 사용하는 것이 쉽지만, jsf만으로는 100 % 확신 할 수 없습니다. 이 http://www.coderanch.com/t/212933/JSF/java/if-like-JSF-conditions를 시도해보십시오. 패널 그룹에 속임수가 적용될 수 있습니다. –

답변

1

당신이 할 수있는 더 나은 장소는 PhaseListener 구현입니다. 당신이보기 루트에 새 구성 요소를 추가하는 방법을 예를 다음 코드 샘플을 들어

:

public class ViewModifierPhaseListener implements 
     javax.faces.event.PhaseListener { 

    @Override 
    public void afterPhase(PhaseEvent event) { 
    } 

    // Just sampling add component on ViewRoot 
    @Override 
    public void beforePhase(PhaseEvent event) { 
     // Gets the target component from ViewRoot 
     UIViewRoot viewRoot = event.getFacesContext().getViewRoot(); 
     UIComponent parent = viewRoot.findComponent("parentComponentId"); 
     // UIComponents to create depend on JSF implementation, 
     // Try to use the available factories when suplied by the implementation 
     UIComponent child = Factory.getComponent("ComponentClassName"); 
     // Customize the component, for instance it has to be disabled 
     child.getAttributes().put("disabled", true); 
     // Adds the fresh created component to the parent 
     parent.getChildren().add(child); 
    } 

    @Override 
    public PhaseId getPhaseId() { 
     return PhaseId.RENDER_RESPONSE; 
    } 
} 

getPhaseId 때문에 그 단계에서 RENDER_RESPONSE 단계를 반환주의가 당신은 구성 요소 트리가 어디 완전한.

<lifecycle> 
    <phase-listener>your.package.ViewModifierPhaseListener</phase-listener> 
</lifecycle> 

아니면 Facelets의 작업하는 경우 당신은 당신이 원하는 페이지의 템플릿을 정의 할 수 있습니다 :

귀하의 단계 리스너 정의는 다음과 같이 얼굴-config.xml 파일의 라이프 사이클 요소에 설정해야합니다 청취자의 영향을받습니다. 이렇게하면 PhaseListener를 실행할시기를 구분할 수 있습니다.

<f:phaseListener type="your.package.ViewModifierPhaseListener"/> 
관련 문제