Ответ 1
На практике они могут использоваться для достижения того же эффекта, но viewAction
(новый с JSF2.2) имеет следующие улучшения:
-
onPostback
:viewAction
поставляется с этим атрибутом, который позволяет указать, хотите ли вы, чтобы действие выполнялось при обратной передаче в тот же вид (то есть на странице обновления или кнопку submit и т.д.). По умолчанию он равен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
- это более чистый дизайн для выполнения команд представления.