我希望覆盖一些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);
}
}并将以下内容添加到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>当我碰到一个有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);
}
}当我输入一个包含extendedDataTable组件的页面时,不会从这个类中将任何内容打印到控制台。
有人能帮我解释一下为什么这不管用吗?
谢谢
发布于 2011-02-18 11:56:07
您只在faces-config.xml中定义了呈现器,但是没有定义组件。它也必须在faces-config.xml中进行:
<component>
<component-type>customExtendedDataTable</component-type>
<component-class>com.test.customExtendedDataTable</component-class>
</component>不要忘记将getter getComponentType()添加到自定义组件中,它返回与<component-type>中定义的值相同的值。
此外,您还需要创建一个标记文件,以便在视图中使用它。这并不是说您可以替换现有rich:extendedDataTable的代码。例如,您必须使用my:extendedDataTable。创建一个taglib.xml是相当笨拙的,我不能从头上写下它(还?; ),所以这里有一些链接可以帮助您朝着正确的方向前进:
与具体问题无关,类名应该以大写开头真的。
https://stackoverflow.com/questions/5016175
复制相似问题