0

私は PrimeFaces 3.5 と OmniFaces 1.5 を使用しています。私のメイン ページには、一部のコンテンツを更新するための投票コンポーネントがあります。さらに、FullAjaxExceptionHandler を使用して、ajax リクエスト中に例外が発生した場合にエラー ページを表示しています。

index.xhtml

<h:form id="formBsvtt">
  <p:messages autoUpdate="true" showDetail="false" />
  <p:outputPanel id="panelOut" layout="block">
    ...
    ... content to refresh
    ...
  </p:outputPanel>
  <p:panelGrid id="panelIn" layout="block">
    ...
    ... various interaction with user and database access
    ...
    <ui:include src="page1.xhtml" />
    <ui:include src="page2.xhtml" />
    <ui:include src="page3.xhtml" />
    ...
  </p:panelGrid>
  <p:poll widgetVar="poll1" autoStart="true" global="false" interval="15" 
    partialSubmit="true" process="@this" update="panelOut"
    listener="#{myBean.myListener}">
  </p:poll>
</h:form>

web.xml

<error-page>
    <exception-type>javax.faces.application.ViewExpiredException</exception-type>
    <location>/errorViewExpired.xhtml</location>
</error-page>
<error-page>
    <exception-type>java.sql.SQLException</exception-type>
    <location>/errorSQL.xhtml</location>
</error-page>
<error-page>
    <exception-type>java.lang.RuntimeException</exception-type>
    <location>/errorRuntime.xhtml</location>
</error-page>

私の問題は次のとおりです。例外の場合、指定されたエラーページが表示されますが、ポーリングは停止されず、ViewExpired エラーページが 15 秒ごとに表示されます。で止めてみました

<h:outputScript>poll1.stop();</h:outputScript>

エラーページに表示されますが、これは機能しませんでした。

例外が発生した場合にポーリングを停止するにはどうすればよいですか?


更新テンプレートを使用していません。これは私のエラーページです:

<?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:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:fn="http://java.sun.com/jsp/jstl/functions"
    xmlns:of="http://omnifaces.org/functions">

    <h:head>
    </h:head>

    <h:body>

        In der Anwendung trat ein Laufzeitfehler auf!
        <p><a href="#{requestScope['javax.servlet.error.request_uri']}">Anwendung neu starten ...</a></p>
        <ul>
            <li>Date/time: #{of:formatDate(now, 'yyyy-MM-dd HH:mm:ss')}</li>
            <li>User agent: #{header['user-agent']}</li>
            <li>User IP: #{empty header['x-forwarded-for'] ? request.remoteAddr : fn:split(header['x-forwarded-for'], ',')[0]}</li>
            <li>Request URI: <a href="#{requestScope['javax.servlet.error.request_uri']}">#{requestScope['javax.servlet.error.request_uri']}</a></li>
            <li>Ajax request: #{facesContext.partialViewContext.ajaxRequest ? 'Yes' : 'No'}</li>
            <li>Status code: #{requestScope['javax.servlet.error.status_code']}</li>
            <li>Exception type: #{requestScope['javax.servlet.error.exception_type']}</li>
            <li>Exception message: #{requestScope['javax.servlet.error.message']}</li>
            <li>Stack trace: <pre><code>#{of:printStackTrace(requestScope['javax.servlet.error.exception'])}</code></pre></li>
        </ul>
        <h:outputScript>poll1.stop();</h:outputScript>
        <h:outputScript>poll2.stop();</h:outputScript>
        <h:outputScript rendered="#{facesContext.partialViewContext.ajaxRequest}">scrollTo(0, 0);</h:outputScript>

    </h:body>

</html>
4

0 に答える 0