扩展Richfaces组件

Tho*_*ley 6 jsf richfaces

我想要覆盖一些Richfaces组件的功能(主要是extendedDataTable).

有人可以通过代码示例提供他们扩展的任何组件的完整示例吗?

我知道下面的线程描述了如何做,但代码示例将非常有益.

扩展Richfaces组件 - 例如,为特定实现自定义Datatable组件


好的.....我一直在浏览互联网,似乎并没有一步一步的简单例子.似乎也是这样的情况:(

到目前为止,我已经设法将以下内容整合在一起:

我已经创建了一个自定义的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);
     }
}
Run Code Online (Sandbox Code Playgroud)

并将以下内容添加到我的faces-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>
Run Code Online (Sandbox Code Playgroud)

当我点击一个具有entendedDataTable组件的页面时,这似乎正在工作(它将测试代码固定到控制台).

现在我还扩展了HtmlExtendedDataTable类,如下所示:

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);
   }
}
Run Code Online (Sandbox Code Playgroud)

当我输入具有extendedDataTable组件的页面时,没有任何内容从此类中打印到控制台.

有人可以为我提供一些帮助吗?为什么这不起作用?

谢谢

Bal*_*usC 2

您只在 中定义了渲染器faces-config.xml,但没有在任何地方定义组件。faces-config.xml它也必须进入:

<component>
    <component-type>customExtendedDataTable</component-type>
    <component-class>com.test.customExtendedDataTable</component-class>
</component>
Run Code Online (Sandbox Code Playgroud)

并且不要忘记getComponentType()向您的自定义组件添加一个 getter,它返回与 中定义的值相同的值<component-type>

此外,您还需要创建一个标记文件,以便可以在视图中使用它。这并不是说您可以替换现有rich:extendedDataTable. 你必须使用my:extendedDataTable例如。创建 ataglib.xml非常笨拙,我还不能从头到尾写下来(还?;)),所以这里有一些链接可以帮助您找到正确的方向:


与具体问题无关,类名实际上应该以大写字母开头。