代码之家  ›  专栏  ›  技术社区  ›  Romain Linsolas

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

  •  2
  • Romain Linsolas  · 技术社区  · 14 年前

    让我们考虑扩展现有的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>
    

    如您所见,我的项目中有两个类用于定制数据表: MyHtmlDataTable MyDataTableRenderer . 我的一个想法是修改 <F:刻面& GT; 直接在 doEncodeBegin() 渲染器的方法。这是有效的(事实上 almost working 但是我不认为那是更好的地方来实现我的修改。

    你怎么认为?

    技术信息:JSF 1.2、FACELET、Riffs3.3.2、Java 1.6

    1 回复  |  直到 14 年前
        1
  •  0
  •   Bozho    14 年前

    我想你可以打电话 getFacet(facetName) 对返回的组件进行修改。

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