2013-08-01 19 views
6

Korkunç javax.faces.application.ViewExpiredException ile karşılaştıktan sonra, uygun çözümü bulmak için internete göz atmak zorunda kaldım. Neyse ki, çözümler kolayca mevcut ve ben devam ettim ve OmniFaces FullAjaxExceptionHandler kabul etti.Silence FullAjaxExceptionHandler

Yeter ki, OmniFaces'den hemen hemen her şeyde olduğu gibi harikalar üretti. Ama, ben bir görünüm sona erecek olan her zaman alıyorum:

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. 
... 

beklendiği gibi ele alınır gibi bu iyi, ama server.log basılmaktadır bu istisnayı susturmak için zaten var mı? Bu, kütüğü oldukça hızlı bir şekilde kalabalıklaştıracaktır.

Ben çalıştırıyorum:
Mojarra 2.1.23
PrimeFaces 4,0-SNAPSHOT
OmniFaces 1.6-ANLıK-2013-07-01

gereğince
GlassFish 3.1.2.2

cevap

6

üzerinde OmniFaces 1.6, ViewExpiredException için yığın izini atlamak için aşağıdaki gibi genişletebilir ve logException() yöntemini geçersiz kılabilirsiniz.

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); 
     } 
    } 

} 

etrafında bir fabrika oluşturun:

bu, koşmak faces-config.xml fabrikaya her zamanki gibi yolu kaydetmek için almak için
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; 
    } 

} 

(FullAjaxExceptionHandlerFactory için orijinal kaydını kaldırmak unutmayın) :

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

Siz iyi bir beyefendi ve bir bilgin vardır! Çok teşekkürler. – blo0p3r

+0

@BalusC, 'MyAjaxExceptionHandler # logException' içinde bir anahtar eksik. Bu satırın içinde olması gerekir: 'super.logException (bağlam, istisna, konum, mesaj, parametreler);'. Ayrıca, yanılmıyorsam, face-config.xml '' ın com.example.MyAjaxExceptionHandlerFactory olması gerekir. –

+0

@Patrick: yanıt güncellendi. Teşekkürler! – BalusC