【问题标题】:How to dynamically change the content of a facet in a custom component?如何动态更改自定义组件中构面的内容?
【发布时间】:2010-05-03 12:59:10
【问题描述】:

假设我想扩展一个现有的 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。 我的一个想法是直接在我的渲染器的doEncodeBegin() 方法中修改&lt;f:facet&gt; 的内容。这是有效的(实际上是almost working),但我真的不认为这是实现我的修改的更好地方。

你怎么看?

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

【问题讨论】:

    标签: jsf richfaces


    【解决方案1】:

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

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

    【讨论】:

    • 是的,这正是我所做的,但我的问题是知道我必须在哪里这样做?因为目前,我在 RENDER_VIEW 阶段对渲染器类进行了修改,但我对这个解决方案并不完全满意......
    猜你喜欢
    • 2023-04-09
    • 2020-04-06
    • 2012-09-22
    • 1970-01-01
    • 2015-03-04
    • 1970-01-01
    • 2019-11-08
    • 2015-12-31
    • 1970-01-01
    相关资源
    最近更新 更多