我想要覆盖一些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组件的页面时,没有任何内容从此类中打印到控制台.
有人可以为我提供一些帮助吗?为什么这不起作用?
谢谢
您只在 中定义了渲染器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非常笨拙,我还不能从头到尾写下来(还?;)),所以这里有一些链接可以帮助您找到正确的方向:
与具体问题无关,类名实际上应该以大写字母开头。