2011-02-16 9 views
6

मैं कुछ Richfaces घटकों (ज्यादातर विस्तारितडेटाटेबल) की कार्यक्षमता को ओवरराइड करना चाहता हूं।विस्तारित Richfaces घटक

क्या कोई कोड उदाहरणों के साथ विस्तारित किसी भी घटक का एक संपूर्ण उदाहरण प्रदान कर सकता है?

मुझे पता है कि नीचे दिया गया धागा वर्णन करता है कि यह कैसे करें, लेकिन एक कोड उदाहरण बेहद फायदेमंद होगा।

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


ठीक है ..... मैं इंटरनेट trawling किया गया है और इस बात का कदम सरल उदाहरण से स्पष्ट कदम की एक पूरी बहुत कुछ होने के लिए प्रतीत नहीं होता।

मैं एक कस्टम 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 है कंसोल के लिए)।

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); 
    } 
} 

कुछ भी नहीं है इस वर्ग के भीतर से कंसोल के लिए मुद्रित किया गया है जब मैं एक पेज extendedDataTable घटक है कि दर्ज करें:

अब मैं भी HtmlExtendedDataTable वर्ग के रूप में निम्नानुसार बढ़ाया।

क्या कोई मुझे कुछ मदद प्रदान कर सकता है कि यह क्यों काम नहीं कर रहा है?

धन्यवाद

उत्तर

2

आप केवल faces-config.xml में रेंडरर definied है, लेकिन आप घटक कहीं नहीं definied है। यह रूप में अच्छी तरह faces-config.xml में जाना पड़ता है:

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

और भूल जाते हैं जो एक ही मूल्य के रूप में <component-type> में definied किया गया है देता है अपने कस्टम घटक के लिए एक गेटर getComponentType() जोड़ने के लिए नहीं है।

आगे आपको एक टैग फ़ाइल भी बनाने की आवश्यकता है ताकि आप इसे अपने दृश्य में उपयोग कर सकें। ऐसा नहीं है कि आप मौजूदा rich:extendedDataTable के कोड को प्रतिस्थापित कर सकते हैं। उदाहरण के लिए आपको my:extendedDataTable का उपयोग करना होगा। taglib.xml बनाना बहुत बेकार है, मैं इसे सिर के शीर्ष से नीचे नहीं लिख सकता (अभी तक?


ठोस समस्या, classnames चाहिए से संबंधित नहीं:;)), इसलिए यहाँ कुछ लिंक है जो आप सही दिशा में मदद करनी चाहिए रहे हैं really अपरकेस के साथ शुरू करें।

+0

धन्यवाद बाल्सससी। मेरे पास काम करने के लिए शायद पर्याप्त है। मैं उन परिवर्तनों को कर दूंगा और टैगलिब लिंक में देखूंगा। मैं कुछ दिनों में अधिक प्रश्नों के साथ वापस आ सकता हूं जब मैं इसके चारों ओर घूमता हूं;) –

संबंधित मुद्दे