2010-11-23 2 views
0

나는이 주제에 관해 이미 두 가지 질문을했지만 대답은 정보가 부족했다. 나는 내가 잘 설명하지 못했을 수도있다. 자, 나는 더 구체적 일 것이다. "Composite 구성 요소는 JSF 기능이 아닌 Facelets 기능입니다"라는 것을 알고 있습니다. "Facelets는 JSF를 염두에두고 설계된 뷰 기술입니다." 정확히 모르겠지만 "cc.attrs"와 "cc.clientId"라는 약어는 구성 요소의 자바 클래스가 장면 뒤에 있다는 것을 전제로합니다. 나는 "cc.myFunc"를 사용할 수있는 방법으로 오버라이드/확장 할 수 있는지 알고 싶습니다.Facelet에서 "cc.myFunc"를 사용할 수 있도록 구성 요소 클래스를 확장/대체 할 수 있습니까?

답변

1

복합 구성 요소에 사용자 지정 클래스를 제공 할 수 있습니다. 요구 사항은 클래스가 UIComponent이고 인터페이스 NamingContainer를 구현해야한다는 것입니다. 확장 할 수있는 기본 클래스 UINamingContainer가 있습니다.

같은 당신의 복합 사용 뭔가를 선언하려면 : componentType가 속성의 값이 FacesComponent 주석의 값입니다

@FacesComponent("my.CustomComponent") //Component type in the composite 
public class AComponent extends UINamingContainer{ 
    private int a;  

    //setter and getter for a 

    public void sayHello(){ 
     System.out.println("Hello"); 
    } 

} 

참고 :

<cc:interface componentType="my.CustomComponent"> 
</cc:interface> 

클래스는 같은 것을 할 수 있습니다.

복합 구성 요소의 구현에서 # {cc.sayHello()}을 사용합니다. Facelets ELResolver가 없으면 sayHello 속성을 찾기 때문에 괄호가 필요합니다.

관련 문제