2013-02-04 26 views
14

Tôi cần gọi phương thức sao lưu trong khi tải trang. Tôi đã đạt được nó bằng cách sử dụngLàm thế nào để tránh gọi phương thức preRenderView trong yêu cầu ajax?

<f:event listener="#{managedBean.onLoad}" type="preRenderView"> 

Nhưng bất cứ khi nào yêu cầu ajax được thực hiện trong trang, phương thức đó được gọi lại. Tôi không cần nó theo yêu cầu của tôi. Làm thế nào để tránh cuộc gọi phương thức đó trong yêu cầu ajax?

+0

đạt được nó bằng cách sử ?? Vui lòng cung cấp thêm chi tiết nếu bạn muốn được trợ giúp –

Trả lời

26

Sự kiện preRenderView chỉ được gọi trên mọi yêu cầu trước khi hiển thị chế độ xem. Yêu cầu ajax cũng là yêu cầu hiển thị chế độ xem. Vì vậy, hành vi hoàn toàn được mong đợi.

Bạn đã cơ bản 2 lựa chọn:

  1. Thay thế nó bằng @PostConstruct phương pháp trên một bean @ViewScoped.

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

    Sau đó, lệnh này chỉ được gọi khi lần đầu được tạo lần đầu tiên. Một trường hợp bean xem scoped sống miễn là bạn đang tương tác với cùng một view trên postback, ajax hay không.


  2. Thực hiện kiểm tra bên trong phương thức nghe nếu yêu cầu hiện tại là yêu cầu ajax.

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

    Hoặc, nếu bạn thực sự quan tâm đến việc bỏ qua postbacks thay vì yêu cầu đặc biệt ajax, sau đó làm như vậy thay vì:

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

Cảm ơn câu trả lời của bạn, Nhưng Backing Bean của tôi cần phải được phiên scoped ... làm thế nào tôi có thể xử lý này ??? – Arun

+0

Sau đó đi đến phương pháp thứ 2. – BalusC

+1

Cảm ơn bạn rất nhiều BalusC ... Làm việc tuyệt vời của nó :) – Arun

Các vấn đề liên quan