<div class="card">
<h:form>
<h5 class="mt-0">AJAX</h5>
<p:commandButton action="#{exceptionHandlerView.throwViewExpiredException}"
ajax="true"
value="Throw ViewExpiredException!" styleClass="mr-2" />
<p:commandButton action="#{exceptionHandlerView.throwNullPointerException}"
ajax="true"
value="Throw NullPointerException!"/>
<!-- IllegalStateException is not handled using ajaxExceptionHandlers below, so the error page is shown-->
<p:commandButton action="#{exceptionHandlerView.throwWrappedIllegalStateException}"
ajax="true"
value="Throw IllegalStateException!" styleClass="mr-2"/>
<h5>Non-AJAX</h5>
<p:commandButton action="#{exceptionHandlerView.throwViewExpiredException}"
ajax="false"
value="Throw ViewExpiredException!" styleClass="mr-2"/>
<!-- NullPointerException has no specific error-page defined in web.xml compared to ViewExpiredException -->
<!-- https://github.com/primefaces/primefaces/blob/master/primefaces-showcase/src/main/webapp/WEB-INF/web.xml -->
<p:commandButton action="#{exceptionHandlerView.throwNullPointerException}"
ajax="false"
value="Throw NullPointerException!"/>
<p:ajaxExceptionHandler type="javax.faces.application.ViewExpiredException"
update="exceptionDialog"
onexception="PF('exceptionDialog').show()" />
<p:ajaxExceptionHandler type="java.lang.NullPointerException"
update="exceptionDialog"
onexception="PF('exceptionDialog').show()"/>
<p:dialog id="exceptionDialog" header="Exception '#{pfExceptionHandler.type}' occured!"
widgetVar="exceptionDialog"
height="500px">
Message: #{pfExceptionHandler.message} <br/>
StackTrace: <h:outputText value="#{pfExceptionHandler.formattedStackTrace}" escape="false"/> <br/>
<p:button onclick="document.location.href = document.location.href;"
value="Reload!"
rendered="#{pfExceptionHandler.type == 'javax.faces.application.ViewExpiredException'}"/>
</p:dialog>
</h:form>
</div>
@Named
@RequestScoped
public class ExceptionHandlerView {
public void throwNullPointerException() {
throw new NullPointerException("A NullPointerException!");
}
public void throwWrappedIllegalStateException() {
Throwable t = new IllegalStateException("A wrapped IllegalStateException!");
throw new FacesException(t);
}
public void throwViewExpiredException() {
throw new ViewExpiredException("A ViewExpiredException!",
FacesContext.getCurrentInstance().getViewRoot().getViewId());
}
}
Session expired
Reloading page
Message:
StackTrace: java.util.ConcurrentModificationException at java.base/java.util.HashMap.computeIfAbsent(Unknown Source) at org.primefaces.component.lifecycle.LifecyclePhaseListener.getPhaseInfo(LifecyclePhaseListener.java:51) at org.primefaces.component.lifecycle.LifecyclePhaseListener.beforePhase(LifecyclePhaseListener.java:69) at org.apache.myfaces.lifecycle.PhaseListenerManager.informPhaseListenersBefore(PhaseListenerManager.java:77) at org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:183) at org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:142) at javax.faces.lifecycle.LifecycleWrapper.execute(LifecycleWrapper.java:57) at javax.faces.webapp.FacesServlet.service(FacesServlet.java:204) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) at org.primefaces.webapp.filter.NoCacheFilter.doFilter(NoCacheFilter.java:45) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) at org.primefaces.webapp.filter.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:48) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) at org.apache.openejb.server.httpd.EEFilter.doFilter(EEFilter.java:67) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:168) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) at org.apache.tomee.catalina.OpenEJBValve.invoke(OpenEJBValve.java:45) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) at org.apache.tomee.catalina.OpenEJBSecurityListener$RequestCapturer.invoke(OpenEJBSecurityListener.java:97) at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:670) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342) at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390) at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:928) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1794) at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.base/java.lang.Thread.run(Unknown Source)