Рефакторинг UI: включает в себя UI: компоненты - PullRequest
0 голосов
/ 05 апреля 2020

Раньше у меня была куча <ui:composition> шаблонов, и к ним добавлялись

<ui:include src="${bean.type}.xhtml">
    <ui:param name="model" value="#{model}"/>
</ui:include>

${bean.type}, которые указывали относительный путь к шаблону с именем. Например,

/a/b/c/table
/a/c/d/timeline

Теперь я реорганизую их для <ui:component> s

<cc:interface componentType="table">
    <cc:attribute name="model" type="my.company.Model" required="true"/>
</cc:interface>

<cc:implementation>
    <!-- -->
</cc:implementation>

или рассматриваю возможность определения разметки в encodeXXX методах

class Widget extends UIComponentBase {}
class Table extends Widget {}
class TimeLine extends Widget {}

означает, что у меня будут компоненты

mycompany:table
mycompany:timeline

В настоящее время я не могу объявить, что у них есть только их имя из свойства бина

<mycompany:${bean.type} model="#{model}" />
<!-- this obviously doesn't work, but nicely illustrates the idea -->

Я надеваю не хочу, чтобы rendered magi c отображал определенный тег, только если свойство соответствует типу. Я ищу масштабируемое решение, потому что иерархия пользовательских компонентов огромна, и я не хочу просто перечислять их все в шаблоне

<mycompany:table rendered="${bean.type == 'table'}" />
<mycompany:timeline rendered="${bean.type == 'timeline'}" />
<!-- and a lot more -->

Я искал какой-то тег / компонент-преобразователь, который я бы дал «абстрактному» тегу для

<mycompany:widget model="#{model}">

, и он бы преобразовал его в соответствующий подкласс виджета с учетом #{bean.type}, аналогично тому, что делает Application#createComponent(context, name).

Спасибо.

Похожие:

jsf dynamici c тег из строки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...