【发布时间】: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>
如您所见,我的项目中有两个用于自定义数据表的类:MyHtmlDataTable 和 MyDataTableRenderer。
我的一个想法是直接在我的渲染器的doEncodeBegin() 方法中修改<f:facet> 的内容。这是有效的(实际上是almost working),但我真的不认为这是实现我的修改的更好地方。
你怎么看?
技术信息:JSF 1.2、Facelets、Richfaces 3.3.2、Java 1.6
【问题讨论】: