Cloud-Lösungen der Zukunft - Testen!

Revolutionäre Cloud-Technologie, ganz ohne versteckte Kosten. Profitieren Sie von unserer Testphase und entdecken Sie umfassende Funktionen. Der Anmeldeprozess ist transparent und unkompliziert. Starten Sie jetzt Ihre Reise in die Cloud - Kostenfrei!

JSF Validation Beispiel

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

<?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 id="mname" required="true"
				requiredMessage="Mobile Name is mandatory"></h:inputText>
			<br>
			<br>

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

			<h:outputLabel for="model">Model Number:</h:outputLabel>
			<h:inputText id="model"></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.

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

<?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 id="mno" 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

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

<?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 id="mno" value="#{mobileValidator.mno}">
		<f:validator validatorId="mobileValidator" />
		</h:inputText>
		<h:message for="mno" style="color:blue" />
		<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

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.

Starten Sie Ihre Cloud-Reise mit unserer kostenlosen Trial-Version!

Entdecken Sie die grenzenlosen Möglichkeiten unserer Cloud-Dienste ganz unverbindlich. Melden Sie sich jetzt für unsere kostenlose Trial-Version an und erleben Sie, wie unsere innovativen Lösungen Ihr Business transformieren können.

Try for free!