我希望覆盖一些Richfaces组件的功能(主要是extendedDataTable)。
有人可以通过代码示例提供他们扩展的任何组件的完整示例吗?
我知道下面的主题描述了如何做,但代码示例将非常有用。
Extend Richfaces components - for example customize Datatable component for specific implementation
好的.....我一直在浏览互联网,似乎并没有一步一步的简单例子。在这里也是如此:(
到目前为止,我已设法将以下内容整理在一起:
我已经创建了一个自定义的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组件的页面时,没有任何内容从此类打印到控制台。
有人可以为我提供一些帮助吗?为什么这不起作用?
由于
答案 0 :(得分:2)
你只是在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
非常笨拙,我不能从头顶写下来(还有?;)),所以这里有一些链接可以帮助你朝着正确的方向前进:
与具体问题无关,类名应really以大写字母开头。