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ć preRenderView
obejś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. @PostConstruct
Jest 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. preRenderView
Zdarzenie 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
, @ManagedProperty
itp 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 preRenderView
zamiast <f:viewAction>
. W razie potrzeby możesz dodać zaznaczenie, FacesContext#isPostback()
aby wykonać preRenderView
akcję tylko na początkowe żądanie.
Zobacz też: