W praktyce można je stosować, aby osiągnąć ten sam efekt, ale viewAction
(nowa z JSF2. 2) zawiera następujące udoskonalenia:
onPostback
: viewAction
pochodzi z tego atrybutu, który pozwala określić, czy działania, które należy wykonać na odświeżenie strony do samego widoku (czyli na odświeżenie strony lub przycisk złożyć etc). Domyślnie jest to false
, więc nie musisz go nawet określać, jeśli nie potrzebujesz. Aby osiągnąć ten sam efekt z preRenderView
, musisz
<f:metadata>
<f:event type="preRenderView" rendered="#{facesContext.postBack}" listener="#{myBean.initialize}"/>
</f:metadata>
phase
: Atrybut ten pozwala określić, że działania realizowane w określonym etapie JSF. Domyślnie jest to INVOKE_APPLICATION
, ale wszystkie pozostałe identyfikatory fazy JSF są tutaj poprawne.
if
: Ten atrybut umożliwia podanie wyrażenia wartości, które jest wynikiem wyniku boolowskiego. Działanie widoku zostanie wykonane tylko w wyniku tego wyrażenia.
immediate
: Ten atrybut teraz przyznaje zdolność dotyczący viewAction
być wykonywany podczas fazy APPLY_REQUEST_VALUES
(przed fazą domyślny INVOKE_APPLICATION
), co pozwala zachowywać się jak zwykły UIComponent
Ogólnie , viewAction
jest czystszym podejściem do wykonywania poleceń przeglądania.
Sztuczka z 'renderowanym =" ... "' z tagiem '' nie działa dla mnie (na Wildfly 9.0 z Mojarra 2.2.11). Zgodnie z dokumentacją [JSF 2.2 VDL] (https://docs.oracle.com/javaee/7/javaserver-faces-2-2/vdldocs-facelets/), '' nie ma 'renderowanego- atrybut. –
Nie jest to udokumentowane @ MartinHöller, ale ja (miałem, kiedy napisałem tę odpowiedź) JSF2.2 na GF4, a tag zawiera atrybut "renderowany". Być może było to niedopatrzenie ze strony deweloperów. – kolossus
Być może bahawiński zmienił się z niewielką wersją, ale próbowałem 'render =" false "', a metoda określona przez atrybut 'listener' został wywołany za każdym razem, gdy zażądano widoku. –