Имеет ли значение место f: событие в метаданных f или нет? - PullRequest
9 голосов
/ 08 сентября 2011

w.r.t. Как выполнить действие над GET-запросом с помощью f: viewParam?

<f:metadata>
    <f:viewParam name="id" value="#{tInputBean.id}" />
    <f:event type="preRenderView" listener="#{tInputBean.init}" />
</f:metadata>

Мне интересно узнать, имеет ли значение, если preRenderView f:event находится внутри метаданных f: или нет. Я проверил учебник по Java EE6, полный справочник по Java Server Faces 2.0 и Core JSF2, и ни у одного из них нет примеров события f: в метаданных f: но я видел много примеров в Интернете, подобных этому.

JSF2 Compl.Ref говорит, стр.540

Тег f: metadata инкапсулирует набор элементов, используемых для указания метаданные для представления Facelet, и, следовательно, должны быть потомками f: просмотреть тег и может не отображаться в шаблоне. Начиная с JSF2.0, единственным Цель этого тега - инкапсулировать теги f: viewParam.

Имеет ли место событие f: (часто используемое для поддержки f: viewParam) внутри метаданных f: особое значение, или это просто для того, чтобы помочь визуально / логически сгруппировать его рядом с f: viewParam?

1 Ответ

8 голосов
/ 08 сентября 2011

Нет, <f:event> строго не требуется размещать внутри <f:metadata>.Его можно прикрепить к любому компоненту.Это действительно для чисто самодокументированных целей, помещенных в <f:metadata> всякий раз, когда у вас есть набор <f:viewParam> с, и вы хотите подключить <f:event> для вызова действия после того, как все эти параметры представления былизадавать.Он даже может быть размещен вне / перед этими <f:viewParam> s, но это делает код не более самодокументирующимся.

Обратите внимание, что в следующем JSF 2.2 будет введен новый тег <f:viewAction>, который вХод должен заменить <f:event type="preRenderView"> в <f:metadata>.

...