2013-02-04 11 views
14

Muszę wywołać metodę w backingu bean podczas ładowania strony. Osiągnąłem to, używającJak uniknąć wywołania metody preRenderView w żądaniu ajax?

Ale zawsze, gdy zapytanie ajax zostanie wykonane na stronie, metoda ta zostanie ponownie wywołana. Nie potrzebuję tego w moim wymaganiu. Jak uniknąć tego wywołania metody w żądaniu ajax?

+0

osiągnąć go za pomocą ?? Podaj więcej szczegółów, jeśli potrzebujesz pomocy. –

Odpowiedz

26

Zdarzenie preRenderView jest wywoływane na każde żądanie przed renderowaniem widoku. Żądanie ajax jest również żądaniem, które renderuje widok. Tak więc zachowanie jest w pełni oczekiwane.

Masz zasadniczo 2 opcje:

  1. zastąpić ją @PostConstruct sposobu na @ViewScoped fasoli.

    @ManagedBean 
    @ViewScoped 
    public class ManagedBean { 
    
        @PostConstruct 
        public void onLoad() { 
         // ... 
        } 
    
    } 
    

    Jest to wywoływane tylko wtedy, gdy komponent bean jest tworzony po raz pierwszy. Instancja z zakresem widoku z podglądem działa tak długo, jak długo użytkownik korzysta z tego samego widoku w postbackach, ajaxu lub nie.


  2. Przeprowadzić kontrolę wewnątrz metody detektora jeżeli obecny wniosek jest ajax żądanie.

    @ManagedBean 
    // Any scope. 
    public class ManagedBean { 
    
        public void onLoad() { 
         if (FacesContext.getCurrentInstance().getPartialViewContext().isAjaxRequest()) { 
          return; // Skip ajax requests. 
         } 
    
         // ... 
        } 
    
    } 
    

    Lub, jeśli jesteś rzeczywiście zainteresowany omijając postbacks zamiast specjalnie ajax wniosków, a następnie zrobić zamiast:

     if (FacesContext.getCurrentInstance().isPostback()) { 
          return; // Skip postback requests. 
         } 
    
+0

Dziękuję za odpowiedź, ale mój Backing Bean musi mieć zakres sesji ... w jaki sposób mogę sobie z tym poradzić? – Arun

+0

Następnie przejdź do drugiego podejścia. – BalusC

+1

Bardzo dziękuję BalusC ... Świetnie działa :) – Arun

Powiązane problemy