2011-02-16 21 views
6

Estoy buscando anular la funcionalidad de algunos componentes de Richfaces (principalmente la tabla de datos extendidos).Extendiendo los componentes de Richfaces

¿Podría alguien proporcionar un ejemplo completo de cualquier componente que extendieron, con ejemplos de código?

Sé que el hilo a continuación describe cómo hacerlo, pero un ejemplo de código sería muy beneficioso.

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


Ok ..... he estado pesca de arrastre de la Internet y no parece ser un montón de claro paso a paso simples ejemplos de esto. Parece ser el caso aquí también :(

he logrado reunir los siguientes hasta el momento:

He creado un procesador ExtendedDataTableRenderer encargo de la siguiente manera:

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

y ha añadido la siguiente a mi faces-config.xml de la siguiente manera:

<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> 

Cuando llegué a una página que tiene un componente entendedDataTable esto parece estar funcionando (se prining el código de prueba a la consola).

Ahora también extendió la clase HtmlExtendedDataTable de la siguiente manera:

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

Nada se ha impreso a la consola desde dentro de esta clase cuando entro en una página que tiene el componente extendedDataTable.

¿Alguien podría ayudarme por qué esto no funciona, por favor?

Gracias

Respuesta

2

sólo ha definied el renderizador en faces-config.xml, pero se han definied el componente de la nada. Se tiene que ir en el faces-config.xml así:

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

Y no se olvide de añadir un captador getComponentType() a su componente personalizado que devuelve el mismo valor que se ha definied en <component-type>.

Además, necesita crear un archivo de etiqueta para que pueda usarlo en su vista. No es así que puede sustituir el código de un rich:extendedDataTable existente. Tienes que usar my:extendedDataTable por ejemplo. Crear un taglib.xml es bastante torpe, no puedo escribirlo desde la parte superior de la cabeza (¿todavía?;)), Así que aquí están algunos enlaces, que deben ayudar en la dirección correcta:


Sin relación con el problema concreto, nombres de las clases debe really comienza con mayúsculas.

+0

Gracias BalsusC. Probablemente tengo suficiente allí para que funcione. Haré esos cambios y miraré los enlaces taglib. Quizás regrese con más preguntas en pocos días cuando lo encuentre;) –

Cuestiones relacionadas