2011-02-16 4 views
6

일부 Richfaces 컴포넌트 (주로 extendedDataTable)의 기능을 대체하려고합니다.Richfaces 확장 컴포넌트

누군가 코드 예제를 사용하여 확장 한 구성 요소의 철저한 예를 제공 할 수 있습니까?

아래 스레드가이를 수행하는 방법을 알고 있지만 코드 예제는 매우 유용 할 것입니다.


확인

Extend Richfaces components - for example customize Datatable component for specific implementation

는 ..... 나는 인터넷을 트롤 어업을 봤는데,이 단계 간단한 예제로 명확한 단계의 전체를 많이 될 것 같지 않습니다.

나는 다음과 같이 정의 ExtendedDataTableRenderer 렌더러를 만들었습니다 :

package com.test; 

import java.io.IOException; 

import javax.faces.component.UIComponent; 
import javax.faces.context.FacesContext; 
import org.richfaces.renderkit.html.ExtendedDataTableRenderer; 

public class HtmlExtendedDataTableRendered extends ExtendedDataTableRenderer 
{ 
    @Override 
    public void encodeBegin(FacesContext context, UIComponent component) throws IOException 
    { 
       System.out.println("------- in HtmlExtendedDataTableRendered init() -----"); 

        // TODO Auto-generated method stub 
        super.encodeBegin(context, component); 
    } 
} 

그리고 추가 한 다음 여기에 너무 :(

나는 지금까지 다음과 함께 넣어 관리 한 사건을 것 같다 내 얼굴-config.xml 파일에 다음과 같이

<render-kit> 
    <renderer> 
      <component-family>org.richfaces.ExtendedDataTable</component-family> 
      <renderer-type>org.richfaces.ExtendedDataTableRenderer</renderer-type> 
      <renderer-class>com.test.HtmlExtendedDataTableRendered</renderer-class> 
    </renderer> 
</render-kit> 

나는이 작동하는 것 같은 entendedDataTable 구성 요소가 페이지를 명중 할 때 (이 테스트 코드를 prining한다 콘솔로). 나는 extendedDataTable 구성 요소가있는 페이지를 입력 할 때

package com.test; 

import java.io.IOException; 
import javax.faces.context.FacesContext; 
import org.richfaces.component.html.HtmlExtendedDataTable; 

public class customExtendedDataTable extends HtmlExtendedDataTable { 
    /* 
    * The renderer type for this component. 
    */ 
    public static final String RENDERER_TYPE = "com.test.HtmlExtendedDataTableRendered"; 

    public customExtendedDataTable() { 

     System.out.println("------- in customExtendedDataTable init() -----"); 

     setRendererType(RENDERER_TYPE); 
    } 

    @Override 
    public String getFamily() { 
     return customExtendedDataTable.RENDERER_TYPE; 
    } 


    @Override 
    public boolean groupIsExpanded(int index) 
    { 
     System.out.println("------- in groupIsExpanded -----"); 

     // TODO Auto-generated method stub 
     return super.groupIsExpanded(1); 
    } 

    @Override 
    public void encodeBegin(FacesContext context) throws IOException 
    { 
     System.out.println("------- in encodeBegin -----"); 

     // TODO Auto-generated method stub 
     super.encodeBegin(context); 
    } 
} 

것도이 클래스 내에서 콘솔에 인쇄되지되어 다음과 같이

지금 나는 또한 HtmlExtendedDataTable 클래스를 확장했다.

아무에게도 이것이 도움이되지 않는 이유에 대한 도움을 줄 수 있습니까?

감사

답변

2

는 만 faces-config.xml의 렌더러를 definied했지만, 당신은 아무데도 구성 요소를 definied 없다.

<component> 
    <component-type>customExtendedDataTable</component-type> 
    <component-class>com.test.customExtendedDataTable</component-class> 
</component> 

을 그리고 <component-type>에 definied 된대로 같은 값을 반환하는 사용자 정의 구성 요소에 게터 getComponentType()를 추가하는 것을 잊지 마세요 : 그것은뿐만 아니라 faces-config.xml에 가야한다.

또한보기에서 사용할 수 있도록 태그 파일을 만들어야합니다. 기존 rich:extendedDataTable의 코드를 대체 할 수있는 것은 아닙니다. 예를 들어 my:extendedDataTable을 사용해야합니다. 을 만드는 것은 꽤 서투른 모양입니다. 머리 꼭대기에서 쓰지는 못합니다 (아직?, 클래스 이름이해야 구체적인 문제에


관련없는 :)), 그래서 여기에 올바른 방향으로 도움이 될 몇 가지 링크가 있습니다 really 대문자로 시작하십시오.

+0

감사 BalsusC. 아마 그걸 작동시킬 정도로 충분할거야. 나는 그 변화를 만들고 taglib 링크를 살펴볼 것입니다. 내가 며칠 만에 돌아 가면 더 많은 질문을 할 수 있습니다.) –