Moja strona ma funkcję Ajax show / hide. Podczas ładowania strony początkowej moje metody komponentu bean, które są wewnątrz nierenderowanego <f:subview>
lub <h:panelGroup>
nie są nazywane. Po ponownym renderowaniu @form
przy użyciu Ajax wywoływane są moje metody komponentu bean, chociaż odpowiednie widoki podrzędne nie są renderowane. Czy to powinno się zdarzyć? (Używam JSF 2.2)
Odpowiedzi:
0 dla odpowiedzi № 1Jest to oczekiwane zachowanie zgodnie z powyższym komentarzem. Niestety wiąże się z jakimś brzydkim zachowaniem.
Jeśli jesteś obiektem, który robi coś podczas korzystania z listy, będzie działał dobrze przy pierwszym żądaniu. Nawet jeśli podjąłeś środki ostrożności, ładując coś za pomocą f:event
nie uratuje cię to przy następującym żądaniu AJAX.
Przykład: Jeśli używasz JPA z każdą fasolą zarządzaną dla zakresu żądania i ta fasola ma leniwą kolekcję, która nie jest renderowana, spowoduje to:
Żądanie 1: Nierenderowane komponenty nie zostaną dotknięte, tj. Kolekcje Lazy nie zostaną zainicjowane
Żądanie 2 (Ajax): JSF spróbuje przywrócić pełny widok, wywołując niezaładowaną leniwą kolekcję, co spowoduje wyjątek.