Benutzerdefinierte JSF-Fehlerseiten

Wenn Sie eine Anwendung in der Entwicklungsprojektphase ausführen und auf einen Fehler stoßen, erhalten Sie eine Fehlermeldung in unerwünschter Form. Sie möchten wahrscheinlich nicht, dass Ihre Benutzer diese Nachricht auf so hässliche Weise sehen.

Um eine bessere Fehlerseite zu ersetzen, verwenden Sie Fehlerseite Tag in der web.xml Datei, indem Sie entweder a Java-Ausnahme oder ein HTTP Fehlercode. Falls also der Typ der ausgelösten Ausnahme mit dem im genannten Typ übereinstimmt web.xml-Ausnahmetyp oder der vom Server generierte Fehlercode stimmt überein Fehlercode das erwähnt in der web.xml, Das JSF-Framework kümmert sich darum, indem es den Benutzer in die gewünschte Ansicht weiterleitet, die Sie für solche Fehler oder Ausnahmen definiert haben.

1. Der Bereitstellungsdeskriptor

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
	id="WebApp_ID" version="2.5" metadata-complete="true">
	<error-page>
		<error-code>404</error-code>
		<location>/faces/error.xhtml</location>
	</error-page>
	<error-page>
		<error-code>500</error-code>
		<location>/faces/error.xhtml</location>
	</error-page>
	<error-page>
		<exception-type>java.lang.Exception</exception-type>
		<location>/faces/error.xhtml</location>
	</error-page>
	<context-param>
		<description>State saving method: 'client' or 'server'
						(=default). See JSF Specification 2.5.2
		</description>
		<param-name>javax.faces.STATE_SAVING_METHOD</param-name>
		<param-value>server</param-value>
	</context-param>
	<context-param>
		<param-name>javax.faces.application.CONFIG_FILES</param-name>
		<param-value>/WEB-INF/faces-config.xml</param-value>
	</context-param>
	<servlet>
		<servlet-name>Faces Servlet</servlet-name>
		<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
		<load-on-startup>1</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>Faces Servlet</servlet-name>
		<url-pattern>/faces/*</url-pattern>
	</servlet-mapping>
	<servlet-mapping>
		<servlet-name>Faces Servlet</servlet-name>
		<url-pattern>*.xhtml</url-pattern>
	</servlet-mapping>
	<listener>
		<listener-class>com.sun.faces.config.ConfigureListener</listener-class>
	</listener>
</web-app>
  • Die Fehlercodes, die in dieser definierten web.xml behandelt werden, sind: 500 Und 400.
  • Die Ausnahmen, die in dieser definierten web.xml behandelt werden, sind die Wurzel der Ausnahmen, die ausgelöst werden könnten java.lang.Exception.
  • Alle definierten Fehlercodes und Ausnahmen müssen in einer zwingenden Fehlerseite mit dem Namen behandelt werden error.xhtml.

2. Faces-Konfigurationsdatei

faces-config.xml

<?xml version="1.0" encoding="UTF-8"?>
<faces-config xmlns="http://xmlns.jcp.org/xml/ns/javaee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-facesconfig_2_2.xsd"
	version="2.2">
<application>
	<resource-bundle>
		<base-name>net.javabeat.jsf.application</base-name>
		<var>msg</var>
	</resource-bundle>
</application>
</faces-config>
  • An der Gesichtskonfiguration werden keine Änderungen vorgenommen, um das Fehlerseitenkonzept zu unterstützen

3. Die Fehlerseite

error.xhtml

<html xmlns="http://www.w3.org/1999/xhtml"
	xmlns:ui="http://java.sun.com/jsf/facelets"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:f="http://java.sun.com/jsf/core">
<h1>JavaBeat JSF 2.2 Examples</h1>
<h2>JSF2 - Error Handling</h2>
<br />
<h:outputText value="Error Code: #{errorHandler.statusCode}"></h:outputText>
<br />
<h:outputText value="Error Desscription: #{errorHandler.message}"></h:outputText>
<br />
<h:outputText value="Exception Type: #{errorHandler.exceptionType}"></h:outputText>
<br />
<h:outputText value="Exception Calss: #{errorHandler.exception}"></h:outputText>
<br />
<h:outputText value="Request URI : #{errorHandler.requestURI}"></h:outputText>
</html>

4. ErrorHandler RequestScoped Bean

ErrorHandler.java

package net.javabeat.jsf.error;

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

@ManagedBean
@RequestScoped
public class ErrorHandler {

	public String getStatusCode(){
		String val = String.valueOf((Integer)FacesContext.getCurrentInstance().getExternalContext().
				getRequestMap().get("javax.servlet.error.status_code"));
		return val;
	}

	public String getMessage(){
		String val =  (String)FacesContext.getCurrentInstance().getExternalContext().
			getRequestMap().get("javax.servlet.error.message");
		return val;
	}

	public String getExceptionType(){
		String val = FacesContext.getCurrentInstance().getExternalContext().
			getRequestMap().get("javax.servlet.error.exception_type").toString();
		return val;
	}

	public String getException(){
		String val =  (String)((Exception)FacesContext.getCurrentInstance().getExternalContext().
			getRequestMap().get("javax.servlet.error.exception")).toString();
		return val;
	}

	public String getRequestURI(){
		return (String)FacesContext.getCurrentInstance().getExternalContext().
			getRequestMap().get("javax.servlet.error.request_uri");
	}

	public String getServletName(){
		return (String)FacesContext.getCurrentInstance().getExternalContext().
			getRequestMap().get("javax.servlet.error.servlet_name");
	}

}
  • Die Fehlerhandler-Bean ist als RequestScoped definiert
  • Mehrere mit dem Fehler in Zusammenhang stehende Objekte werden in der Anforderungszuordnung platziert und als solche betrachtet Servlet-Ausnahmeattribute

5. Fehleranfällige Seite

index.xhtml

<html xmlns="http://www.w3.org/1999/xhtml"
	xmlns:ui="http://java.sun.com/jsf/facelets"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:f="http://java.sun.com/jsf/core">
	<f:view>
		<h:form prependId="false">
			<h1>JavaBeat JSF 2.2 Examples</h1>
			<h2>JSF2 - Error Handling</h2>
			<br/>
			<h:outputText value="#{indexBean.message}"></h:outputText>

			<h:commandButton value="Throws Exception" action="#{indexBean.navigate}"/>
		</h:form>
	</f:view>
</html>

6. Fehleranfällige verwaltete Bean

IndexBean.java

package net.javabeat.jsf;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

@ManagedBean
@SessionScoped
public class IndexBean {
	private String message;

	public String getMessage() {
		return message;
	}

	public void setMessage(String message) {
		this.message = message;
	}

	public String navigate(){
		// Assume an exception has been thrown by some business logic
		System.out.println(10/0);
		return "anonymousView";
	}
}

7. Demo zur JSF-Fehlerbehandlung

Die folgenden Schnappschüsse zeigen Ihnen in einer überzeugenden Ansicht, wie eine ausgelöste Ausnahme behandelt werden kann.

Beispiel 1 für die JSF 2-Fehlerseitenansicht

Beispiel 2 für die JSF 2-Fehlerseitenansicht

8. JSF ohne benutzerdefinierte Fehlerseite

Der folgende Schnappschuss zeigt Ihnen die hässliche Seite, die den Benutzern möglicherweise angezeigt wird, während sie auf Ihrer Website navigieren.

Beispiel 3 für eine JSF 2-Fehlerseite

(wpdm_file id=57)

Kommentar verfassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Nach oben scrollen