RichFaces - Hata İşleme
Bu bölümde, RichFaces'te uygulanabilecek farklı hata işleme yöntemleri hakkında bilgi edineceğiz.
Sunucu Tarafı ve İstemci Tarafı Hata İşleme
Eylem sınıfı temelli istisnaları ele almak için oldukça eski Java tekniğini (try / Catch) incelememiz gerekiyor. İstemci tarafı için, istemci tarafında bir hata oluştuğunda hata mesajını gösterecek fazladan bir dosya ekleyebiliriz.
İstemci tarafındaki hataları işlemek için aşağıdaki kod parçacığı web.xml'ye eklenebilir.
<error-page>
<exception-type>java.lang.Throwable</exception-type>
<location>/error.xhtml</location>
</error-page>
Yukarıdaki istisnanın yalnızca statik istisna mesajları sağlayacağını ve dinamik istisna özelliğini kullanmak için JSF "ExceptionHandler" sınıfını kullanmamız gerekebileceğini unutmayın. Çalışma zamanında RichFaces, uygulamadaki istisnanın birincil yapı taşı olarak kullanılabilen giriş alanlarını doğrulamak için bazı özellikler sağlar.
Yeni bir dosya oluşturun ve aşağıdaki kodu içine yerleştirin.
<?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>
Karşılık gelen java sınıfı aşağıdaki gibi normal bir fasulye sınıfı olmalıdır.
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;
}
}
Yukarıdaki örnek, <h: form> 'da bir hata olduğunda tarayıcıda aşağıdaki çıktıyı verecektir.
Kaynak Yükleme
RichFaces, JSF uygulamasında standart kaynak işleme prosedürünü iyileştirir. Bu, ResourceServlet'i yapılandırarak veya Kaynak optimizasyonu ile uygulanabilir. ResourceServlet'i yapılandırmak için, aşağıdaki kod parçasını web.xml'ye eklememiz gerekir.
<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>
Ayrıca, farklı JavaScript ve CSS dosyalarını optimize edecek JSF uygulamasında optimizasyonu etkinleştirebiliriz. Uygulamada optimizasyonu sağlamak için aşağıdaki kodu eklememiz gerekiyor.
<context-param>
<param-name>org.richfaces.resourceOptimization.enabled</param-name>
<param-value>true</param-value>
</context-param>