Как динамически изменить содержимое фасета в пользовательском компоненте? - PullRequest
2 голосов
/ 03 мая 2010

Давайте рассмотрим, что я хочу расширить существующий компонент 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

1 Ответ

0 голосов
/ 03 мая 2010

Полагаю, вы можете вызвать getFacet(facetName) и внести изменения в возвращенный компонент.

Вы можете переопределить getFacets() (и / или getFacet(..)), вызвать метод super и внести изменения в возвращаемое значение, а затем вернуть его.

...