让我们考虑扩展现有的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:facet>
方法中修改doEncodeBegin()
的内容。这是有效的(实际上almost working),但我并不认为这是实现我的修改的更好地方。
您怎么看?
技术信息:JSF 1.2,Facelets,Richfaces 3.3.2,Java 1.6
答案 0 :(得分:0)
我猜你可以调用getFacet(facetName)
并对返回的组件进行修改。
您可以覆盖getFacets()
(和/或getFacet(..)
),调用super
方法并对返回的值进行修改,然后将其返回。