Когда я изучаю разработку пользовательских компонентов в JSF, я запутался в связи между семейством компонентов, типом компонента и типом средства визуализации. Например, я зарегистрировал средство визуализации и пользовательский компонент, как показано ниже.
faces-config.xml
:
<component>
<component-type>study.faces.Div</component-type>
<component-class>javax.faces.component.UIPanel</component-class>
</component>
<render-kit>
<render-kit-id>HTML_BASIC</render-kit-id>
<renderer>
<component-family>javax.faces.Panel</component-family>
<renderer-type>study.faces.DivRenderer</renderer-type>
<renderer-class>com.study.ui.DivRenderer</renderer-class>
</renderer>
</render-kit>
Я также зарегистрировал новый тег в файле my.taglib.xml
, как показано ниже:
<tag>
<tag-name>div</tag-name>
<component>
<component-type>study.faces.Div</component-type>
<renderer-type>study.faces.DivRenderer</renderer-type>
</component>
</tag>
Эта конфигурация работает очень хорошо. Однако я не понял, почему при регистрации средства визуализации требуется строка
. В my.taglib.xml
компонент и средство визуализации связаны, и, IMHO, этого должно было быть достаточно, чтобы выбрать подходящее средство визуализации для компонента. Какая польза от дополнительного параметра
?
Я проводил исследования в Google, и все полученные ответы говорят примерно так: «Один модуль визуализации может использоваться для визуализации нескольких компонентов. Эти компоненты принадлежат одна семья". Но эти заявления не развеяли моего замешательства. Может ли кто-нибудь объяснить взаимосвязь между типом компонента, семейством компонентов и стратегией выбора средства визуализации? (Надеюсь, с хорошим примером.)