2013-08-01 41 views
6

Vì vậy, sau khi đối mặt với nỗi sợ hãi javax.faces.application.ViewExpiredException, tôi phải đi khắp nơi trên Internet để tìm ra giải pháp phù hợp. May mắn thay, các giải pháp có sẵn và tôi đã đi trước và thông qua OmniFaces FullAjaxExceptionHandler.Im lặng FullAjaxExceptionHandler

Đủ cho biết, cũng như với mọi thứ từ OmniFaces, nó đã làm việc kỳ diệu. Nhưng, mỗi khi tôi có một cái nhìn hết hạn Tôi nhận:

SEVERE: WebModule[/myModule]FullAjaxExceptionHandler: An exception occurred during processing JSF ajax request. Error page '/WEB-INF/errorpages/test.xhtml' will be shown. 
javax.faces.application.ViewExpiredException: viewId:/my/page.xhtml - View /my/page.xhtml could not be restored. 
... 

Điều này là tốt vì nó được xử lý như mong đợi, nhưng là có anyway để im lặng ngoại lệ này từ được in với server.log? Điều này sẽ đám đông đăng nhập khá nhanh chóng.

Tôi đang chạy:
cá móm 2.1.23
PrimeFaces 4,0-SNAPSHOT
OmniFaces 1,6 SNAPSHOT-2013-07-01

trên
Glassfish 3.1.2.2

Trả lời

6

Theo OmniFaces 1.6, bạn có thể mở rộng nó và ghi đè lên phương thức logException() như dưới đây để bỏ qua dấu vết ngăn xếp cho ViewExpiredException.

public class YourAjaxExceptionHandler extends FullAjaxExceptionHandler { 

    public YourAjaxExceptionHandler(ExceptionHandler wrapped) { 
     super(wrapped); 
    } 

    @Override 
    protected void logException(FacesContext context, Throwable exception, String location, String message, Object... parameters) { 
     if (exception instanceof ViewExpiredException) { 
      // With exception==null, no trace will be logged. 
      super.logException(context, null, location, message, parameters); 
     } 
     else { 
      super.logException(context, exception, location, message, parameters); 
     } 
    } 

} 

Tạo một nhà máy xung quanh nó:

public class YourAjaxExceptionHandlerFactory extends ExceptionHandlerFactory { 

    private ExceptionHandlerFactory wrapped; 

    public YourAjaxExceptionHandlerFactory(ExceptionHandlerFactory wrapped) { 
     this.wrapped = wrapped; 
    } 

    @Override 
    public ExceptionHandler getExceptionHandler() { 
     return new YourAjaxExceptionHandler(getWrapped().getExceptionHandler()); 
    } 

    @Override 
    public ExceptionHandlerFactory getWrapped() { 
     return wrapped; 
    } 

} 

Để có được điều này để chạy, đăng ký nó như nhà máy ở faces-config.xml theo cách thông thường (đừng quên để loại bỏ việc đăng ký ban đầu cho FullAjaxExceptionHandlerFactory) :

<factory> 
    <exception-handler-factory>com.example.YourExceptionHandlerFactory</exception-handler-factory> 
</factory> 
+0

Bạn tốt là một quý ông và một học giả! Cảm ơn nhiều. – blo0p3r

+0

@BalusC một công tắc bị thiếu trong 'MyAjaxExceptionHandler # logException'. Dòng này cần phải ở bên trong dòng khác: 'super.logException (ngữ cảnh, ngoại lệ, vị trí, thông báo, tham số);'. Ngoài ra, nếu tôi không nhầm lẫn thì faces-config.xml '' cần phải là com.example.MyAjaxExceptionHandlerFactory. –

+0

@Patrick: câu trả lời đã được cập nhật. Cảm ơn! – BalusC

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