Как эффективно использовать страницы JSF (1.2) и их компоненты? - PullRequest
0 голосов
/ 04 февраля 2012

Я знаю, что вопрос - это больше вопрос, который нужно обсудить, чем ответ, но я не смог перефразировать вопрос, чтобы сделать его более конкретным.

В настоящее время я занимаюсь разработкой страниц на основе JSF 1.2, и я думал о том, как эффективно повторно использовать части страниц. Мне пришла в голову следующая идея (пример сценария):

Страница 1 состоит из трех частей, то же самое относится и к странице 2. Я извлек три части в отдельных файлах, и я включаю их на страницах 1 и 2 (используя <ui:include />).

Таким образом, страница 1 включает в себя части 1, 2 и 3, а страница 2 - части 1, 2 и 3 (они идентичны).

В этот момент я думал о том, как повторно использовать поддерживающие бобы, и мне пришла в голову следующая идея:

Каждая страница имеет свой собственный компонент поддержки, назовем его «компонент 1» (для страницы 1) и компонент 2 (для страницы 2).

Я определяю интерфейс для каждой части. Таким образом, у меня есть один интерфейс (называемый интерфейс 1) для части 1, второй интерфейс (называемый интерфейс 2) для части 2 и так далее. Эти интерфейсы определяют все методы, необходимые для его части. F.ex. если часть 1 требует атрибута «test» (a String) на сайте JSF (<h:outputText value="#{bean.test}" />), интерфейс 1 определяет метод с именем public String getTest();.

Итак, моя основная идея заключается в том, что если страница 1 включает в себя часть 1, ее компонент поддержки (компонент 1) должен реализовывать интерфейс 1. В моем сценарии базовый компонент страницы 1 будет реализовывать интерфейс 1, 2 и 3. Страница 2 также будет реализовывать интерфейс 1, 2 и 3.

Таким образом, до этого момента код в компоненте поддержки остается избыточным, чего я хочу избежать. Чтобы решить эту проблему, я создаю абстрактные реализации для интерфейса 1, 2 и 3, которые называются абстрактной частью 1 и т. Д.

Эти абстрактные классы будут расширены компонентами 1 и 2. Компоненты 1 и 2 будут переопределять только те методы, которые отличаются от абстрактной реализации (например, методы, отвечающие за загрузку данных - в приведенном выше примере public String getTest(); может переопределить, чтобы предоставить разные данные для страницы 1 и страницы 2).

Так что мое окончательное решение - тихий комплекс. Теперь мой «вопрос»: это хороший способ повторно использовать бобы? Есть ли у кого-нибудь лучшие решения?

С уважением

stupidSheep

1 Ответ

0 голосов
/ 04 февраля 2012

Если я создаю фрагмент страницы *, который я намерен повторно использовать на нескольких страницах, я обычно создаю вспомогательный компонент только для фрагмента и передаю любую контекстную информацию, необходимую для фрагмента, через параметры (и DI Seam, но это не быть жизнеспособным для вас):

<ui:include scr="/common/myfragment.xhtml">
    <ui:param name="property" value="#{pageBean.property}" />
</ui:include>

Таким образом, вашим компонентам страницы не требуется реализовывать какую-либо функциональность фрагмента.

* Извините за использование термина фрагмент, под которым я имею в виду не тег <ui:fragment>, а произвольную часть страницы.

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