Когда использовать preRenderView против viewAction?
Когда следует использовать событие preRenderView для инициализации данных для страницы по сравнению с использованием viewAction? Они равны в использовании и имеют ли они одинаковый эффект?
Событие preRenderView
<f:metadata>
<f:event type="preRenderView" listener="#{myBean.initialize}"/>
</f:metadata>
или же
viewAction
<f:metadata>
<f:viewAction action="#{myBean.initialize}"/>
</f:metadata>
1 ответ
На практике их можно использовать для достижения того же эффекта, но viewAction
(новый с JSF2.2) имеет следующие улучшения:
onPostback
:viewAction
поставляется с этим атрибутом, который позволяет вам указать, хотите ли вы, чтобы действие выполнялось при обратной передаче в то же представление (то есть при обновлении страницы или при нажатии кнопки и т. д.). По умолчаниюfalse
так что вам даже не нужно указывать это, если вам не нужно. Для достижения того же эффекта сpreRenderView
, тебе понадобиться<f:metadata> <f:event type="preRenderView" rendered="#{facesContext.postBack}" listener="#{myBean.initialize}"/> </f:metadata>
phase
: этот атрибут позволяет указать, что действие будет выполняться во время определенной фазы JSF. По умолчаниюINVOKE_APPLICATION
, но все остальные идентификаторы фазы JSF действительны здесь.if
: Этот атрибут позволяет вам предоставить выражение значения, которое оценивает логический результат. Действие просмотра будет выполнено только в результате этого выражения.immediate
: Этот атрибут теперь дает возможностьviewAction
быть выполненным во времяAPPLY_REQUEST_VALUES
фаза (в отличие от значения по умолчаниюINVOKE_APPLICATION
фаза), позволяя ему вести себя как обычныйUIComponent
В целом, viewAction
это более чистый подход к выполнению команд вида.