首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >扩展Richfaces组件

扩展Richfaces组件
EN

Stack Overflow用户
提问于 2011-02-16 12:04:12
回答 1查看 4.6K关注 0票数 6

我希望覆盖一些Richfaces组件(主要是extendedDataTable)的功能。

有人能提供一个完整的例子,说明他们扩展的任何组件,以及代码示例吗?

我知道下面的线程描述了如何做到这一点,但是一个代码示例将非常有益。

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

好吧……我一直在网际网路上搜索,似乎并没有一步一步地清晰地说明这方面的简单例子。这里似乎也是如此:

到目前为止,我已经完成了以下工作:

我创建了一个定制的ExtendedDataTableRenderer呈现器,如下所示:

代码语言:javascript
复制
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);
     }
}

并将以下内容添加到faces-config.xml中:

代码语言:javascript
复制
<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组件的页面时,这似乎是有效的(它正在将测试代码输出到控制台)。

现在,我还对HtmlExtendedDataTable类进行了如下扩展:

代码语言:javascript
复制
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组件的页面时,不会从这个类中将任何内容打印到控制台。

有人能帮我解释一下为什么这不管用吗?

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-02-18 11:56:07

您只在faces-config.xml中定义了呈现器,但是没有定义组件。它也必须在faces-config.xml中进行:

代码语言:javascript
复制
<component>
    <component-type>customExtendedDataTable</component-type>
    <component-class>com.test.customExtendedDataTable</component-class>
</component>

不要忘记将getter getComponentType()添加到自定义组件中,它返回与<component-type>中定义的值相同的值。

此外,您还需要创建一个标记文件,以便在视图中使用它。这并不是说您可以替换现有rich:extendedDataTable的代码。例如,您必须使用my:extendedDataTable。创建一个taglib.xml是相当笨拙的,我不能从头上写下它(还?; ),所以这里有一些链接可以帮助您朝着正确的方向前进:

  • JSF组件开发
  • JSF组件编写清单
  • 带有所有事件处理程序的JSF组件

与具体问题无关,类名应该以大写开头真的

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5016175

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档