RichFaces - การจัดการข้อผิดพลาด
ในบทนี้เราจะเรียนรู้เกี่ยวกับวิธีการจัดการข้อผิดพลาดต่างๆที่สามารถนำไปใช้ใน RichFaces
การจัดการข้อผิดพลาดฝั่งเซิร์ฟเวอร์และฝั่งไคลเอ็นต์
เราจำเป็นต้องใช้เทคนิค Java แบบเก่า ๆ (ลอง / จับ) เพื่อจัดการกับข้อยกเว้นตามคลาสแอ็คชั่น สำหรับฝั่งไคลเอ็นต์เราสามารถเพิ่มไฟล์พิเศษได้หนึ่งไฟล์ซึ่งจะแสดงข้อความแสดงข้อผิดพลาดเมื่อใดก็ตามที่เกิดข้อผิดพลาดในฝั่งไคลเอ็นต์
สามารถเพิ่มข้อมูลโค้ดต่อไปนี้ใน 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>