0

我幾乎搜索了關於FullAjaxExceptionHandler的所有問題,他們都沒有解決我的問題。錯誤頁面沒有顯示FullAjaxExceptionHandler

那麼,我已經實現了FullAjaxExceptionHandler,但它不處理Ajax請求。如果要求不是AJAX它的工作原理確定並重定向到過期的頁面,但如果是阿賈克斯,網頁一片空白,我得到:

FullAjaxExceptionHandler: An exception occurred during processing JSF ajax request. Error page '/view/errorpages/expired.faces' will be shown. 
javax.faces.application.ViewExpiredException: viewId:/view/main.faces - A exibição de /view/main.faces não pôde ser restaurada. 
at com.sun.faces.lifecycle.RestoreViewPhase.execute(RestoreViewPhase.java:200) 
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) 
at com.sun.faces.lifecycle.RestoreViewPhase.doPhase(RestoreViewPhase.java:111) 
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118) 
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:508) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
at org.primefaces.webapp.filter.FileUploadFilter.doFilter(FileUploadFilter.java:98) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
at org.omnifaces.filter.CacheControlFilter.doFilter(CacheControlFilter.java:226) 
at org.omnifaces.filter.HttpFilter.doFilter(HttpFilter.java:77) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
at org.omnifaces.filter.FacesExceptionFilter.doFilter(FacesExceptionFilter.java:56) 
at org.omnifaces.filter.HttpFilter.doFilter(HttpFilter.java:77) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
at org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter.doFilterInternal(OpenEntityManagerInViewFilter.java:113) 
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88) 
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222) 
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123) 
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) 
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168) 
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99) 
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929) 
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407) 
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1002) 
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:585) 
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312) 
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918) 
at java.lang.Thread.run(Thread.java:662) 

附:我確定我沒有在別處手動重定向。

編輯:我嘗試過的方法與自定義ViewExpiredException

public class ViewExpiredException extends ExceptionHandlerWrapper { 

private ExceptionHandler wrapped; 

public ViewExpiredException(ExceptionHandler wrapped) { 
    this.wrapped = wrapped; 
} 

@Override 
public ExceptionHandler getWrapped() { 
    return this.wrapped; 
} 

@Override 
public void handle() throws FacesException { 

    for (Iterator<ExceptionQueuedEvent> iter = getUnhandledExceptionQueuedEvents() 
      .iterator(); iter.hasNext();) { 
     ExceptionQueuedEvent evt = iter.next(); 
     Throwable exception = evt.getContext().getException(); 
     FacesContext fc = evt.getContext().getContext(); 
     if (exception instanceof javax.faces.application.ViewExpiredException) { 

      try { 
       fc.getExternalContext().redirect("/sino/view/main.xhtml"); 
       fc.responseComplete(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } finally { 
       iter.remove(); 
      } 
     } 
    } 
    getWrapped().handle(); 
    } 

} 

它同時適用於Ajax和非Ajax請求。但我還是想用omnifaces接近

UPDATE改變一些日誌之後,我當頁面重定向後變成空白,得到了這個消息:

Warning: you have included the Google Maps API multiple times on this page. This may cause unexpected errors.    main.js.53 

我不認爲這是問題,但我也不知道爲什麼用FullAjaxExceptionHandler它發生並且ViewExpiredException不會。

EDIT2:現在expired.xhtml是:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:ui="http://java.sun.com/jsf/facelets" 
    xmlns:t="http://myfaces.apache.org/tomahawk" 
    xmlns:f="http://java.sun.com/jsf/core" 
    xmlns:h="http://java.sun.com/jsf/html" xml:lang="pt" lang="pt"> 
<ui:composition> 
    <h:form> 
     <h:outputText value="View Expired" /> 
    </h:form> 
</ui:composition> 
</html> 

而且我還沒有重定向,但現在的頁面不會變成空白。該頁面停留在同一頁,我得到:

Uncaught TypeError: Cannot read property '0' of null    primefaces.js.faces?ln=primefaces:1 

也許是重定向之前的問題?

+0

檢查HTTP流量監視器和JS控制檯。一切都按原樣進行了嗎? – BalusC

+0

我想我在這裏有一個奇怪的情況。當重定向工作我有一個JavaScript錯誤,但是當重定向沒有工作時,頁面變爲空白,並且沒有顯示錯誤。我會用照片編輯給你看。 – Shadi

+0

嗯,其實我不能張貼圖片,因爲我的聲譽。 – Shadi

回答

0

我刪除了一些標籤元素後,出現同樣的問題。嘗試重定向到沒有使用名稱空間的標籤來查看它是否有效的頁面。