Давайте рассмотрим, что я хочу расширить существующий компонент 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()
моего рендерера. Это работает (на самом деле почти работает ), но я не думаю, что это лучшее место для достижения моей модификации.
Что вы думаете?
Техническая информация: JSF 1.2, Facelets, Richfaces 3.3.2, Java 1.6