The Java 6 EE Tutorial – Validazioni in JSF

Le validazioni JSF si ottengono in diversi modi:

  1. Usando JSF validator tag da annidare nella dichiarazione dei componenti nella view: viene fatto il binding tramite value expression ad una proprietà del backing bean.
  2. Creando un metodo nel backing beane facendovi riferimento nel componente tramite l’attributo validator.
    1. Il metodo del backing bean che esegue la validazione deve accettare un FacesContext, il componente i cui dati devono essere validati e il dato da validare ( stessa signature del metodo validate dell’interfaccia Validator). Possono essere validati solo valori di componenti UIInput o di suoi discendenti).
  3. Usando Bean Validator (NEW IN Java 6). I constraints per la validazione sono definiti tramite annotation su campi, metodi o classi di JavaBean component (quindi anche backing bean). Sono disponibili constraints built-in e in più se ne possono definire altre custom. Si può mettere più di un constraint sullo stesso elemento.

Esempi

JSF validator tag

<h:inputText id="Username" value="#{UserBean.userName}">
   <f:validateLength minimum="6" maximum="15"/>
</h:inputText>

Metodo nel backing bean

public void validateEmail(FacesContext context,UIComponent toValidate, Object value) {
  String message = "";
  String email = (String) value;
  if (email.contains(’@’)) {
    ((UIInput)toValidate).setValid(false);
    message = CoffeeBreakBean.loadErrorMessage(context,CoffeeBreakBean.CB_RESOURCE_BUNDLE_NAME,    "EMailError");
    context.addMessage(toValidate.getClientId(context),new FacesMessage(message));
  }
}

Nella view

<h:inputText value="#{userBean.email}" validator="#{userBean.validateEmail}">
</h:inputText>

Bean Validator 

Built-in

public class Name {
  @NotNull
  @Size(min=1, max=16)
  private String firstname;
  @NotNull
  @Size(min=1, max=16)
  private String lastname;
}

Validatori built-in disponibili

Custom

@NotNull
@Size(min = 3)
@FirstUpper
public String getName() {
  return name;
}
Definizione della annotation
package me.m1key.jsf.constraints;

import static java.lang.annotation.ElementType.ANNOTATION_TYPE;
import static java.lang.annotation.ElementType.CONSTRUCTOR;
import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.ElementType.PARAMETER;
import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import javax.validation.Constraint;
import javax.validation.Payload;

@Documented
@Constraint(validatedBy = FirstUpperValidator.class)
@Target( { METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER })
@Retention(RetentionPolicy.RUNTIME)

public @interface FirstUpper {
  String message() default "{me.m1key.jsf.constraints.FirstUpper.message}";
  Class<?>[] groups() default {};
  Class<? extends Payload>[] payload() default {};
}
Implementazione del validatore
package me.m1key.jsf.constraints;

import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;

public class FirstUpperValidator implements ConstraintValidator<FirstUpper, String> {
@Override
public void initialize(FirstUpper firstUpper) {
 // See JSR 303 Section 2.4.1 for sample implementation.
}

@Override
public boolean isValid(String value, ConstraintValidatorContext context) {
  if (value == null || value.length() == 0) {
    return true;
  }
  return value.substring(0, 1).equals(value.substring(0, 1).toUpperCase());
}
}
See more at:
http://viralpatel.net/blogs/javaserver-faces-jsf-validation-tutorial-error-handling-jsf-validator/
http://www.mkyong.com/jsf2/custom-validator-in-jsf-2-0/
http://blog.m1key.me/2010/07/custom-validation-with-bean-validation.html
Annunci

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...