<a:form> <a:growl showDetail="true"/> <a:panel header="Validate"> <h:panelGrid columns="4" cellpadding="5"> <h:outputLabel for="email1" value="Email 1: (JSF Validation)" /> <a:inputText id="email1" value="#{customValidationView.text}"> <f:validator validatorId="custom.emailValidator" /> </a:inputText> <a:message for="email1" display="tooltip" /> <h:outputText value="#{customValidationView.text}" /> <h:outputLabel for="email2" value="Email 2: (Bean Validation)" /> <a:inputText id="email2" value="#{customValidationView.email}" /> <a:message for="email2" display="tooltip" /> <h:outputText value="#{customValidationView.email}" /> </h:panelGrid> <a:commandButton value="Save" ajax="false" icon="ui-icon-check" validateClient="true"/> </a:panel> </a:form> <script type="text/javascript"> /** * Faces Validator */ PrimeFaces.validator['custom.emailValidator'] = { pattern: /\S+@\S+/, validate: function(element, value) { //use element.data() to access validation metadata, in this case there is none. if(!this.pattern.test(value)) { throw { summary: 'Validation Error', detail: value + ' is not a valid email.' } } } }; /** * Bean validator */ PrimeFaces.validator['Email'] = { pattern: /\S+@\S+/, MESSAGE_ID: 'org.primefaces.examples.validate.email.message', validate: function(element, value) { var vc = PrimeFaces.util.ValidationContext; if(!this.pattern.test(value)) { var msgStr = element.data('p-email-msg'), msg = msgStr ? {summary:msgStr, detail: msgStr} : vc.getMessage(this.MESSAGE_ID); throw msg; } } }; </script>
package com.jarch.showcase.view.csv; import javax.faces.bean.ManagedBean; @ManagedBean public class CustomValidationView { private String text; @Email(message = "must be a valid email") private String email; public String getText() { return text; } public void setText(String text) { this.text = text; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } }
package com.jarch.showcase.view.csv; import java.util.Map; import java.util.regex.Pattern; import javax.faces.application.FacesMessage; 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; import org.primefaces.validate.ClientValidator; /** * Custom JSF Validator for Email input */ @FacesValidator("custom.emailValidator") public class EmailValidator implements Validator, ClientValidator { private Pattern pattern; private static final String EMAIL_PATTERN = "^[_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-]+)*@" + "[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$"; public EmailValidator() { pattern = Pattern.compile(EMAIL_PATTERN); } public void validate(FacesContext context, UIComponent component, Object value) throws ValidatorException { if(value == null) { return; } if(!pattern.matcher(value.toString()).matches()) { throw new ValidatorException(new FacesMessage(FacesMessage.SEVERITY_ERROR, "Validation Error", value + " is not a valid email;")); } } public Map<String, Object> getMetadata() { return null; } public String getValidatorId() { return "custom.emailValidator"; } }
package com.jarch.showcase.view.csv; import static java.lang.annotation.ElementType.*; import static java.lang.annotation.RetentionPolicy.*; import java.lang.annotation.Documented; import java.lang.annotation.Retention; import java.lang.annotation.Target; import javax.validation.Constraint; import javax.validation.Payload; import org.primefaces.validate.bean.ClientConstraint; @Target({METHOD,FIELD,ANNOTATION_TYPE}) @Retention(RUNTIME) @Constraint(validatedBy=EmailConstraintValidator.class) @ClientConstraint(resolvedBy=EmailClientValidationConstraint.class) @Documented public @interface Email { String message() default "{org.primefaces.examples.primefaces}"; Class<?>[] groups() default {}; Class<? extends Payload>[] payload() default {};
package com.jarch.showcase.view.csv; import java.util.regex.Pattern; import javax.validation.ConstraintValidator; import javax.validation.ConstraintValidatorContext; /** * ConstraintValidator for @Email */ public class EmailConstraintValidator implements ConstraintValidator<Email, String>{ private Pattern pattern; private static final String EMAIL_PATTERN = "^[_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-]+)*@" + "[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$"; public void initialize(Email a) { pattern = Pattern.compile(EMAIL_PATTERN); } public boolean isValid(String value, ConstraintValidatorContext cvc) { if(value == null) return true; else return pattern.matcher(value.toString()).matches(); } }
package com.jarch.showcase.view.csv; import java.util.HashMap; import java.util.Map; import javax.validation.metadata.ConstraintDescriptor; import org.primefaces.validate.bean.ClientValidationConstraint; /** * ClientValidationConstraint for @Email annotation */ public class EmailClientValidationConstraint implements ClientValidationConstraint { public static final String MESSAGE_METADATA = "data-p-email-msg"; public Map<String, Object> getMetadata(ConstraintDescriptor constraintDescriptor) { Map<String,Object> metadata = new HashMap<String, Object>(); Map attrs = constraintDescriptor.getAttributes(); Object message = attrs.get("message"); if(message != null) { metadata.put(MESSAGE_METADATA, message); } return metadata; } public String getValidatorId() { return Email.class.getSimpleName(); } }