如何动态更改自定义组件中构面的内容?

时间:2010-05-03 12:59:11

标签: jsf richfaces

让我们考虑扩展现有的JSF组件,例如<rich:datatable/>。我的主要要求是动态修改<f:facet>的内容,以更改其内容。

实现这一目标的最佳方法是什么?或哪里是代码中实现这一目标的最佳位置?

在我的faces-config.xml中,我有以下声明:

<faces-config>
    ...
    <component>
        <component-type>my.component.dataTable</component-type>
        <component-class>my.project.component.table.MyHtmlDataTable</component-class>
    </component>
    ...
    <render-kit>
        <render-kit-id>HTML_BASIC</render-kit-id>
        <renderer>
            <component-family>org.richfaces.DataTable</component-family>
            <renderer-type>my.renderkit.dataTable</renderer-type>
            <renderer-class>my.project.component.table.MyDataTableRenderer</renderer-class>
        </renderer>
        ...

另外,我的my-project.taglib.xml文件(因为我使用Facelets)看起来像:

<facelet-taglib>
    <namespace>http://my.project/jsf</namespace>
    <tag>
        <tag-name>dataTable</tag-name>
        <component>
            <component-type>my.component.dataTable</component-type>
            <renderer-type>my.renderkit.dataTable</renderer-type>
        </component>
    </tag>

正如您所看到的,我的项目中有两个用于自定义数据表的类:MyHtmlDataTableMyDataTableRenderer。 我的一个想法是直接在我的渲染器的<f:facet>方法中修改doEncodeBegin()的内容。这是有效的(实际上almost working),但我并不认为这是实现我的修改的更好地方。

您怎么看?

技术信息:JSF 1.2,Facelets,Richfaces 3.3.2,Java 1.6

1 个答案:

答案 0 :(得分:0)

我猜你可以调用getFacet(facetName)并对返回的组件进行修改。

您可以覆盖getFacets()(和/或getFacet(..)),调用super方法并对返回的值进行修改,然后将其返回。