Tutorials  /  JavaScript

JSF Validation Beispiel

Ccentron Redaktion · März 2024 ·3 Min. Lesezeit ·JavaScript, Tutorial

Das JSF Validation Modell definiert eine Reihe von Standardklassen zur Validierung der UI-Komponenten. Die JSF-Bibliothek definiert eine Gruppe von Kern-Tags, die den Implementierungen von javax.faces.validator.Validator entsprechen. Neben den Standardfehlermeldungen ermöglicht das Validierungsmodell, dass wir benutzerdefinierte Validierungen definieren. Validierungen in JSF können in Imperativ und Deklarativ kategorisiert werden.

JSF Validation - Deklarativer Validator

Die Validierungen, die mit JSF-Standardvalidatoren oder Bean-Validatoren ausgelöst werden, fallen unter den deklarativen Typ. Beispiele für JSF-Standardvalidatoren sind Längenvalidator, Erforderlichkeitsvalidator usw. Betrachten Sie ein Beispiel für einen Standardvalidator. Erstellen Sie mobile.xhtml als mobile.xhtml

Code
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="https://www.w3.org/1999/xhtml"
	xmlns:h="https://java.sun.com/jsf/html">
<h:head>
</h:head>
<h:body>
	<h3>Add Mobile Details</h3>
	<h:form>
		<h:panelGrid columns="3">
			<h:outputLabel for="mname">Mobile Name:</h:outputLabel>
			<h:inputText required="true"
				requiredMessage="Mobile Name is mandatory"></h:inputText>
			<br>
			<br>

			<h:outputLabel for="color">Color:</h:outputLabel>
			<h:inputText required="true"></h:inputText>
			<br>
			<br>

			<h:outputLabel for="model">Model Number:</h:outputLabel>
			<h:inputText></h:inputText>
			<br>
			<br>

			<h:commandButton value="Submit"></h:commandButton>
		</h:panelGrid>
	</h:form>
</h:body>
</html>

Hier setzen wir das erforderliche Attribut auf true, was das Feld obligatorisch macht und die benutzerdefinierte Nachricht „Wert ist erforderlich“ für das Farbfeld auslöst und eine vom Benutzer definierte Nachricht für das Feld Mobilname, da die Nachricht im Attribut requiredMessage angegeben ist. Führen Sie die Anwendung aus und Sie werden den Absenden-Knopf sehen.

VM

Passende Infrastruktur bei centron

Node-Anwendungen wollen deployt werden: ccloud³ VMs mit vollem Root-Zugriff ab 3,12 € im Monat – oder gleich als Managed Server, wenn der Betrieb nicht bei Ihnen liegen soll. Cloud Server mieten →

JSF Imperative Validierung

Die Standardvalidierungsnachrichten würden nicht in allen Fällen ausreichen und manchmal könnten komplexe Validierungen erforderlich sein. Imperative Validierung ermöglicht es Benutzern, dies zu tun durch:

  • Auslösen der Validierung aus der Bean-Methode
  • Verwendung der Annotation @FacesValidator in der Klasse zur Laufzeit

Validierung aus der Bean-Methode auslösen In dieser Art der Validierung schreiben wir eine Methode in der Bean, um die UIComponents zu validieren und rufen diese Methode von der JSF-Seite über ein Validator-Attribut im inputText-Tag auf. Betrachten wir nun ein Beispiel für das Auslösen einer Validierung aus der Bean. mob.xhtml

Code
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="https://www.w3.org/1999/xhtml"
	xmlns:h="https://java.sun.com/jsf/html">
<h:head>
</h:head>
<h:body>
	<h3>Add Mobile Details</h3>
	<h:form>
		<h:outputLabel for="mno">Model Number:</h:outputLabel>
		<h:inputText value="#{mobile.mno}" required="true" size="4"
			disabled="#{mobile.mno}" validator="#{mobile.validateModelNo}">
		</h:inputText>
		<h:commandButton value="Submit"></h:commandButton>
	</h:form>
</h:body>
</html>

Auf dieser Seite rufen wir die Methode validateModelNo des Java-Beans im Validator-Tag-Attribut auf. Erstellen Sie Mobile.java als

Go
package com.journaldev.jsf.bean;

import java.io.Serializable;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.component.UIComponent;
import javax.faces.component.UIInput;
import javax.faces.context.FacesContext;

@ManagedBean
@SessionScoped
public class Mobile implements Serializable {

	private static final long serialVersionUID = -7250065889869767422L;

	// @NotNull(message="Please enter the model number")
	private String mno;

	public String getMno() {
		return mno;
	}

	public void setMno(String mno) {
		this.mno = mno;
	}

	public void validateModelNo(FacesContext context, UIComponent comp,
			Object value) {

		System.out.println("inside validate method");

		String mno = (String) value;

		if (mno.length() < 4) {
			((UIInput) comp).setValid(false);

			FacesMessage message = new FacesMessage(
					"Minimum length of model number is 4");
			context.addMessage(comp.getClientId(context), message);

		}

	}

}

Hier überprüfen wir die Länge der Modellnummer und wenn die Länge weniger als 4 beträgt, geben wir die Nachricht „Mindestlänge der Modellnummer ist 4“ aus. Führen Sie nun die Anwendung aus.

Verwendung von @FacesValidator im Bean - Benutzerdefinierter JSF-Validator

In dieser Methode verwenden wir die Annotation @FacesValidator, spezifizieren den Namen für den Validator und implementieren den Validator, indem wir die Methode validate überschreiben. mobvalidator.xhtml

Code
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="https://www.w3.org/1999/xhtml"
	xmlns:h="https://xmlns.jcp.org/jsf/html"
	xmlns:f="https://java.sun.com/jsf/core">
<h:head>
</h:head>
<h:body>
	<h:form>
		<h3>Validation using Faces validator</h3>
		<h:outputLabel for="mno" value="Model Number: " />
		<h:inputText value="#{mobileValidator.mno}">
		<f:validator validatorId="mobileValidator" />
		</h:inputText>
		<h:message for="mno" />
		<p></p>
		<h:commandButton value="Submit"></h:commandButton>
	</h:form>
</h:body>
</html>

Hier rufen wir den benutzerdefinierten Validator mit dem Namen „mobileValidator“ im ValidatorId-Attribut des -Tags auf. Erstellen Sie MobileValidator.java als

Go
package com.journaldev.jsf.bean;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.validator.FacesValidator;
import javax.faces.validator.Validator;
import javax.faces.validator.ValidatorException;

@ManagedBean
@SessionScoped
@FacesValidator("mobileValidator")
public class MobileValidator implements Validator {

	private String mno;

	public String getMno() {
		return mno;
	}

	public void setMno(String mno) {
		this.mno = mno;
	}

	int maximumlength = 6;

	public MobileValidator() {
	}

	@Override
	public void validate(FacesContext fc, UIComponent uic, Object obj)
			throws ValidatorException {

		String model = (String) obj;

		if (model.length() > 6) {
			FacesMessage msg = new FacesMessage(
					" Maximum Length of 6 is exceeded.Please enter values within range");
			msg.setSeverity(FacesMessage.SEVERITY_ERROR);

			throw new ValidatorException(msg);
		}

	}

}

Hier überschreiben wir die standardmäßige Validate-Methode und implementieren unsere eigene Logik zur Validierung der Eingabefelder. Führen Sie die Anwendung aus.

Jetzt 200 € Guthaben sichern

Testen Sie Ihr Setup auf ccloud³

Registrieren Sie sich in der ccloud³ und erhalten Sie 200 € Startguthaben für Ihr Projekt – z. B. für eine PostgreSQL-VM mit automatischen Backups.

centron Redaktion Technische Redaktion

Das Redaktionsteam von centron schreibt Anleitungen aus dem Betriebsalltag: getestet auf unserer eigenen Plattform, betrieben im Rechenzentrum in Hallstadt bei Bamberg.

Kategorie JavaScript
Teilen
Noch offene Fragen?

Our team will help you with your specific setup - in German or English, by people who run the platform themselves.

War dieses Tutorial hilfreich?

Your answer is stored anonymously and helps us improve our tutorials.

Kommentare

No comments yet - be the first to ask a question about this tutorial.

Sign in to comment

Comments are open to centron customers. Sign in to your account to ask a question about this tutorial.

Weiterlesen

Das könnte Sie auch interessieren

Jetzt kostenlos anfangen

Melden Sie sich an und erhalten Sie in den ersten 60 Tagen ein Guthaben von 200 € bei centron.

Dieses Werbeangebot gilt nur für neue Konten. Angebot ausschließlich für Gewerbetreibende.

Jetzt loslegen Sales kontaktieren