如何以编程方式将JSF组件写入自定义组件中的响应编写器?

如何以编程方式将JSF组件写入自定义组件中的响应编写器?,jsf,primefaces,jsf-2.2,Jsf,Primefaces,Jsf 2.2,在我决定要解决的任务对于复合组件来说太复杂之后,我正在用JSF设计一个定制组件,并从以下方法开始: @FacesComponent("offervaluescustom") public class OfferValuesCustom extends UIComponentBase { @Override public void encodeBegin(FacesContext context) throws IOException { ResponseWrit

在我决定要解决的任务对于复合组件来说太复杂之后,我正在用JSF设计一个定制组件,并从以下方法开始:

@FacesComponent("offervaluescustom")
public class OfferValuesCustom extends UIComponentBase {

    @Override
    public void encodeBegin(FacesContext context) throws IOException {
        ResponseWriter writer = context.getResponseWriter();
        writer.startElement("table", this);
        //a lof of code
        writer.endElement("table");
    }
}
我正在使用PrimeFaces作为JSF实现,我想知道如何以编程方式将元素写入响应编写器,而不是复制生成的HTML代码,这是一种有效的解决方法,但不是可移植的和不必要的工作重复


我之所以使用递归组件,是因为在某些行中对列进行了有条件的跨越,但在其他行中没有,以及在
encodeBegin
中非常困难的递归,但在
cc:implementation
中由于范围问题(呈现与视图)而非常复杂。

您的确切目标是什么?在“encodeBegin”方法中,您应该生成组件所需的HTML输出。。。没别的了。“包含”其他内容的要求是一种指示,复合组件可能是一种方式!(它们可以有自己的
BackingBean
,也可以通过自己的
taglib
引用…)您的示例没有概述对自定义组件的任何需求。@dognose我为问题添加了一个解释。我开始采用复合组件方法,但由于存在大量问题(变量消失,即设置为
null
,没有任何逻辑解释,也不知道如何处理条件列跨越),我没有取得任何进展。您没有指出具体问题。试着专注于您的主要问题(可能是条件列扩展?),并编写一个自定义组件来尝试满足此需求。忘记问题的其余部分(
//很多代码是回答您问题的人需要猜测的)。如果你有一些问题,你可以在这里发布,但有一个工作的例子。一旦你有了一个基本的组件开始,将它移植到你的案例中应该不会那么困难。@dognose我明白了。实现一个更大的组件作为定制组件似乎更容易,如果您感兴趣,请参阅。