Kiedy należy użyć zdarzenia f: viewAction lub preRenderView do zainicjowania danych dla wersetów strony przy użyciu adnotacji @PostConstruct?
Użyj, <f:viewAction>gdy chcesz wykonać metodę przed renderowaniem kodu HTML. Jest to szczególnie przydatne, jeśli chcesz wykonywać akcje na podstawie wartości modelu ustawionych przez <f:viewParam>podczas fazy aktualizacji wartości modelu. Mianowicie nie są one w tej chwili dostępne @PostConstruct. W JSF 2.0 / 2.1 ten tag nie istniał i musisz zastosować preRenderViewobejście.
Jeśli fasola zapasowa to @RequestScoped, czy skutecznie robią dokładnie to samo? (a więc to zależy od wyboru programisty? (@PostConstruct wydaje się „czystszy”).
Nie, zdecydowanie nie robią skutecznie tego samego. @PostConstructJest odnie do wykonywania czynności bezpośrednio po zakończeniu budowy fasoli i ustawienie wszystkich wstrzyknięto zależnościami i zarządzanych nieruchomości, takich jak @EJB, @Inject, @ManagedProperty, itd. Mianowicie, wstrzyknięte zależności nie są dostępne wewnątrz konstruktora fasoli. Będzie to zatem działać tylko raz na widok, sesję lub aplikację, gdy komponent bean jest objęty zakresem widoku, sesji lub aplikacji. Jest <f:viewAction>on domyślnie wywoływany tylko przy początkowym żądaniu GET, ale można onPostback="true"go skonfigurować tak, aby był wywoływany również w przypadku żądań ogłaszania zwrotnego. preRenderViewZdarzenie jest wywoływane na każde żądanie HTTP (tak, to także ajax żądania!).
Podsumowując, zastosowanie @PostConstruct, jeśli chcesz wykonywać działania na wstrzyknięto zależności i zarządzanych nieruchomości, które są określone przez @EJB, @Inject, @ManagedPropertyitp trakcie budowy fasoli. Użyj, <f:viewAction>jeśli chcesz również wykonywać akcje na właściwościach ustawionych przez <f:viewParam>. Jeśli nadal korzystasz z JSF 2.0 / 2.1, użyj preRenderViewzamiast <f:viewAction>. W razie potrzeby możesz dodać zaznaczenie, FacesContext#isPostback()aby wykonać preRenderViewakcję tylko na początkowe żądanie.
Zobacz też: