RichFaces-エラー処理

この章では、RichFacesで実装できるさまざまなエラー処理方法について学習します。

サーバー側とクライアント側のエラー処理

アクションクラスベースの例外を処理するには、かなり古いJava手法(try / Catch)を実行する必要があります。クライアント側では、ファイルを1つ追加できます。これにより、クライアント側でエラーが発生するたびにエラーメッセージが表示されます。

クライアント側でエラーを処理するために、次のコードスニペットをweb.xmlに追加できます。

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

上記の例外は静的な例外メッセージのみを提供し、動的な例外プロパティを使用するためにJSF「ExceptionHandler」クラスを使用する必要がある場合があることに注意してください。実行時に、RichFacesは入力フィールドを検証するためのいくつかの機能を提供します。これは、アプリケーションの例外の主要な構成要素として使用できます。

新しいファイルを作成し、その中に次のコードを配置します。

<?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>

対応するJavaクラスは、次のような通常のBeanクラスである必要があります。

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; 
   } 
}

上記の例では、<h:form>にエラーが発生するたびに、ブラウザに次の出力が表示されます。

リソースの読み込み

RichFacesは、JSFアプリケーションの標準的なリソース処理手順を改善します。これは、ResourceServletを構成するか、リソースの最適化によって実装できます。ResourceServletを構成するには、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>

JSFアプリケーションで最適化を有効にすることもできます。これにより、さまざまなJavaScriptファイルとCSSファイルが最適化されます。アプリケーションで最適化を実現するには、次のコードを追加する必要があります。

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