| <?xml version="1.0" encoding="UTF-8"?> |
| |
| <!-- |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You under the Apache License, Version 2.0 |
| * (the "License"); you may not use this file except in compliance with |
| * the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| --> |
| |
| <ui:composition template="/main.xhtml" |
| xmlns="http://www.w3.org/1999/xhtml" |
| xmlns:demo="http://myfaces.apache.org/tobago/example/demo" |
| xmlns:f="http://java.sun.com/jsf/core" |
| xmlns:tc="http://myfaces.apache.org/tobago/component" |
| xmlns:ui="http://java.sun.com/jsf/facelets"> |
| |
| <p>Since Tobago 4.0.0 an AjaxExceptionHandler takes care of exceptions in ajax case.</p> |
| <p><span class="#{demo:bootstrapClass('BADGE')} #{demo:bootstrapClass('BADGE_DANGER')}">Important!</span> |
| The exception has to be thrown before the renderer phase. |
| This is the case, in normal actions, but if you need e. g. some initialization of data in a page, you |
| can achieve that with an |
| <code class="language-markup"><f:event type="preRenderView" listener="\#{bean.doSomeCriticalWork}"/></code>.</p> |
| <p>The AjaxExceptionHandler take the first exception that occurs and try to find a proper error page. |
| Error pages are defined in the web.xml.</p> |
| <p>If no proper error page could be found, the error page for error code 500 is displayed instead. |
| If no 500-error-page is defined, the general error page (no exceptiontype or error code defined) is used.</p> |
| <p>If there is no ajax case, the error page could not be found or the renderer phase is active, |
| the AjaxExceptionHandler do nothing and let JSF handle the exception.</p> |
| |
| <tc:section label="Example One"> |
| <p>The output field is updated after an change event of the input field.</p> |
| <p>Set the input value to <b>'x'</b> to throw an exeption.</p> |
| |
| <tc:in id="inputAjax" label="Input" value="#{exceptionHandlerController.value}"> |
| <f:ajax render="outputAjax" listener="#{exceptionHandlerController.update}"/> |
| </tc:in> |
| <tc:out id="outputAjax" label="Output" value="#{exceptionHandlerController.value}"/> |
| </tc:section> |
| |
| <tc:section label="Example Two"> |
| <p>This example use the <code class="language-markup"><f:event type="preRenderView"/></code> tag.</p> |
| <p>An exceptions is thrown after page 7 or higher is selected.</p> |
| |
| <f:event type="preRenderView" listener="#{exceptionHandlerController.preRenderViewListener}"/> |
| |
| <tc:sheet id="s1" value="#{exceptionHandlerController.solarList}" var="object" rows="4" |
| state="#{exceptionHandlerController.sheetState}"> |
| <tc:style maxHeight="500px"/> |
| <tc:column label="Name"> |
| <tc:out value="#{object.name}" labelLayout="skip"/> |
| </tc:column> |
| <tc:column label="Orbit"> |
| <tc:out value="#{object.orbit}" labelLayout="skip"/> |
| </tc:column> |
| <tc:column label="Period (Days)"> |
| <tc:out value="#{object.period}" labelLayout="skip"/> |
| </tc:column> |
| <tc:column label="Discoverer"> |
| <tc:out value="#{object.discoverer}" labelLayout="skip"/> |
| </tc:column> |
| <tc:column label="Year"> |
| <tc:out value="#{object.discoverYear}" labelLayout="skip"/> |
| </tc:column> |
| </tc:sheet> |
| </tc:section> |
| </ui:composition> |