3

Webアプリを次のように設定しました。

 <error-page>
        <exception-type>javax.faces.application.ViewExpiredException</exception-type>
        <location>/WEB-INF/include/viewExpired.html</location>
</error-page>

viewExpiredExceptionがスローされたときに上記のエラーページが表示されるようにします。

ただし、サーバーを再起動して「左オープン」ページでajaxリクエストを送信すると、コンソールに例外がスローされ、エラーページが表示されません。

コンソールからのスタックトレースは次のとおりです。

javax.faces.application.ViewExpiredException: viewId:/contact.jsf - La vue /contact.jsf na pas pu être restaurée.
        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:312)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at com.ocpsoft.pretty.PrettyFilter.doFilter(PrettyFilter.java:118)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:630)
        at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:436)
        at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:374)
        at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:302)
        at com.ocpsoft.pretty.PrettyFilter.doFilter(PrettyFilter.java:110)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        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:235)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at com.jeanbaptistemartin.util.DisableUrlSessionFilter.doFilter(DisableUrlSessionFilter.java:70)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:525)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
        at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
        at java.lang.Thread.run(Thread.java:662)

誰か手がかりを持っていますか?

よろしくお願いします、J。

4

1 に答える 1

2

では、標準のJSF 2.0実装でAjaxエラーを処理したいですか?標準のJSF実装は、このためのすぐに使用できるコンポーネントを提供していません。たとえば、PrimeFacesでは、<p:ajaxStatus>このためのコンポーネントを使用できます。ただし、JSF 2.0仕様では、13.3.6.2章で次のことを概説しています。

13.3.6.2すべてのAjaxリクエストのエラーの処理

JavaScript APIは、jsf.ajax.addOnErrorAjaxリクエスト/レスポンスでエラーが発生したときに通知されるJavaScript関数を登録するために使用できる関数を提供します。詳細については、14.4項「コールバック関数の登録」を参照してください。このjsf.ajax.addOnError関数は、Ajaxの要求/応答サイクル中にエラーが発生したときに通知されるJavaScript関数の引数を受け入れます。[P1-start-event]実装では、登録されているJavaScript関数が、表14-5「エラー」で概説されているエラーに従って呼び出されるようにする必要があります</p>。

ここで、Mojarra開発者の1人のブログを見つけることができます。このブログには、ajaxステータスを表示する方法の基本的な例が含まれています。関連性の抜粋は次のとおりです。

<h3> Status:</h3>
<textarea id="statusArea" cols="40" rows="10" readonly="readonly" />

バックエンドサーバーのデータモデルに接続されていない単純なテキストエリア。

次に、JavaScript(デモの場合、個別にロードされたファイルにありますが、ページに簡単に含めることができます)には、次のものがあります。

var statusUpdate = function statusUpdate(data) {
    var statusArea = document.getElementById("statusArea");
    var text = statusArea.value;
    text = text + "Name: "+data.source.id;
    if (data.type === "event") {
        text = text +" Event: "+data.name+"\n";
    } else {  // otherwise, it's an error
        text = text + " Error: "+data.name+"\n";
    }
    statusArea.value = text;
};

// Setup the statusUpdate function to hear all events on the page
jsf.ajax.addOnEvent(statusUpdate);
jsf.ajax.addOnError(statusUpdate);

JSを使用してエラーページにリダイレクトすることもできます。

window.location = '/errors/500.xhtml';
于 2011-04-15T13:20:32.143 に答える