RichFaces - Tratamento de erros

Neste capítulo, aprenderemos sobre os diferentes métodos de tratamento de erros que podem ser implementados em RichFaces.

Tratamento de erros do lado do servidor e do cliente

Precisamos passar pela técnica Java bastante antiga (try / Catch) para lidar com as exceções baseadas na classe de ação. Para o lado do cliente, podemos adicionar um arquivo extra, que mostrará a mensagem de erro sempre que ocorrer um erro no lado do cliente.

O fragmento de código a seguir pode ser adicionado em web.xml para lidar com erros no lado do cliente.

<error-page> 
   <exception-type>java.lang.Throwable</exception-type> 
   <location>/error.xhtml</location> 
</error-page>

Observe que a exceção acima fornecerá apenas mensagens de exceção estáticas e talvez tenhamos que usar a classe JSF “ExceptionHandler” para usar a propriedade de exceção dinâmica. No tempo de execução, RichFaces fornece alguns recursos para validar os campos de entrada, que podem ser usados ​​como um bloco de construção primário da exceção no aplicativo.

Crie um novo arquivo e coloque o seguinte código nele.

<?xml version = "1.0" encoding = "UTF-8"?>  
<!DOCTYPE html> 
<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:a4j = "http://richfaces.org/a4j"   
   xmlns:rich = "http://richfaces.org/rich"> 
   
   <h:head> 
      <title>Error handling</title> 
      <meta name = "viewport" content = "width = device-width, initial-scale = 1.0"/>
   </h:head> 
    
   <h:body> 
      <h:form id = "form"> 
         <rich:panel> 
            <f:facet name = "header"> 
               <h:panelGroup> 
                  <h:outputText value = "Student Registration" /> 
                  <a4j:status> 
                     <f:facet name = "start"> 
                        <h:graphicImage value = "/images/ai.gif" style = "height:12px;width:12px;" alt = "ai" /> 
                     </f:facet> 
                  </a4j:status> 
               </h:panelGroup> 
            </f:facet> 
            
            <h:panelGrid columns = "3"> 
               <h:outputText value = "Name:" /> 
               <h:inputText value = "#{student.name}" id = "name" label = "name"> 
                  <f:validateLength minimum = "3" maximum = "8" /> 
                  <f:validateRequired /> 
                  <rich:validator /> 
               </h:inputText> 
               <rich:message for = "name" /> 
               <h:outputText value = "Email" /> 
               
               <h:inputText value = "#{student.email}" id = "email" 
                  validatorMessage = "Ivalid email address"> 
                  
                  <f:validateRegex 
                     pattern = 
                     "^(([a-zA-Z0-9_\-\.]+)@([a-zA-Z0-9_\-\.]+)
                     \.([a-zAZ]{2,5}){1,25})+([;.](([a-zA-Z0-9_\-\.]+)
                     @([a-zA-Z0-9_\-\.]+)\.([a-zAZ]{2,5}){1,25})+)*$" /> 
                  <rich:validator /> 
               </h:inputText> 
               
               <rich:message for = "email" /> 
               <h:outputText value = "Age" /> 
               
               <h:inputText value = "#{student.age}" id = "age" label = "age"> 
                  <f:validateLongRange minimum = "18" maximum = "99" /> 
                  <rich:validator /> 
               </h:inputText> 
               <rich:message for = "age" /> 
            </h:panelGrid>
            
         </rich:panel> 
      </h:form> 
   </h:body>
   
</html>

A classe java correspondente deve ser uma classe de bean normal como a seguinte.

import javax.faces.bean.ManagedBean; 
import javax.faces.bean.RequestScoped;  

@ManagedBean 
@RequestScoped 

public class Student { 
   private String name; 
   private String email; 
   private int age;  
   
   public String getName() { 
      return name; 
   }  
   public void setName(String name) { 
      this.name = name; 
   }  
   public String getEmail() { 
      return email; 
   }  
   public void setEmail(String email) { 
      this.email = email; 
   }
   public int getAge() { 
      return age; 
   }  
   public void setAge(int age) { 
      this.age = age; 
   } 
}

O exemplo acima produzirá a seguinte saída no navegador, sempre que houver um erro no <h: form>.

Carregamento de recursos

RichFaces melhora o procedimento padrão de manipulação de recursos no aplicativo JSF. Isso pode ser implementado pela configuração de ResourceServlet ou pela otimização de recursos. Para configurar ResourceServlet, precisamos adicionar o seguinte trecho de código em web.xml.

<servlet> 
   <servlet-name>Resource Servlet</servlet-name> 
   <servlet-class>org.richfaces.webapp.ResourceServlet</servlet-class> 
   <load-on-startup>1</load-on-startup> 
</servlet> 

<servlet-mapping> 
   <servlet-name>Resource Servlet</servlet-name> 
   <url-pattern>/org.richfaces.resources/*</url-pattern> 
</servlet-mapping>

Também podemos habilitar a otimização no aplicativo JSF, o que otimizará diferentes arquivos JavaScript e CSS. Precisamos adicionar o seguinte código para alcançar a otimização no aplicativo.

<context-param> 
   <param-name>org.richfaces.resourceOptimization.enabled</param-name> 
   <param-value>true</param-value> 
</context-param>