Olá,
Alguém pode me ajudar?
Estou a 3 dias tentando fazer este validador, segui dois livros e não funciona.
Acredito que o erro esteja na ligação entre o faces-config e o Validator ou ValidatorTag.
Vamos lá:
faces-config,
<application>
<view-handler>com.sun.facelets.FaceletViewHandler</view-handler>
</application>
<application>
<resource-bundle>
<base-name>com.corejsf.messages</base-name>
<var>msgs</var>
</resource-bundle>
</application>
package com.corejsf;
import java.io.Serializable;
import java.text.MessageFormat;
import java.util.Locale;
import java.util.regex.Pattern;
import javax.faces.application.FacesMessage;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.validator.Validator;
import javax.faces.validator.ValidatorException;
public class RegexValidator implements Validator, Serializable {
private static final long serialVersionUID = -347335108142420997L;
private String expression;
private Pattern pattern;
private String errorSummary;
private String errorDetail;
public void validate(FacesContext context, UIComponent component, Object value) {
System.out.println("Teste passei !!! Teste passei !!! Teste passei !!! Teste passei !!! Teste passei !!! ");
if (value == null) return;
if (pattern == null) return;
if(!pattern.matcher(value.toString()).matches()) {
Object[] params = new Object[] { expression, value };
Locale locale = context.getViewRoot().getLocale();
FacesMessage message = com.corejsf.util.Messages.getMessage(“com.corejsf.messages”, “badRegex”, params);
if (errorSummary != null)
message.setSummary(
new MessageFormat(errorSummary, locale).format(params));
if (errorDetail != null)
message.setDetail(
new MessageFormat(errorDetail, locale).format(params));
throw new ValidatorException(message);
}
}
// PROPERTY: expression
public void setExpression(String newValue) {
expression = newValue;
pattern = Pattern.compile(expression);
}
// PROPERTY: errorSummary
public void setErrorSummary(String newValue) {
errorSummary = newValue;
}
// PROPERTY: errorDetail
public void setErrorDetail(String newValue) {
errorDetail = newValue;
}
}
package com.corejsf;
import javax.el.ELContext;
import javax.el.ValueExpression;
import javax.faces.context.FacesContext;
import javax.faces.validator.Validator;
import javax.faces.webapp.ValidatorELTag;
import javax.servlet.jsp.JspException;
public class RegexValidatorTag extends ValidatorELTag {
private static final long serialVersionUID = 4631891649296244888L;
private ValueExpression expression;
private ValueExpression errorSummary;
private ValueExpression errorDetail;
public void setExpression(ValueExpression newValue) {
expression = newValue;
}
public void setErrorSummary(ValueExpression newValue) {
errorSummary = newValue;
}
public void setErrorDetail(ValueExpression newValue) {
errorDetail = newValue;
}
public Validator createValidator() throws JspException {
System.out.println("Teste passei !!! Teste passei !!! Teste passei !!! Teste passei !!! Teste passei !!! ");
RegexValidator validator = new RegexValidator();
ELContext elContext = FacesContext.getCurrentInstance().getELContext();
validator.setExpression((String) expression.getValue(elContext));
if (errorSummary != null)
validator.setErrorSummary((String) errorSummary.getValue(elContext));
if (errorDetail != null)
validator.setErrorDetail((String) errorDetail.getValue(elContext));
return validator;
}
public void release() {
expression = null;
errorSummary = null;
errorDetail = null;
}
}
minha tag-lib,
<?xml version="1.0" encoding="UTF-8"?>
1.1
validator
http://corejsf.com/validator
validateRegex
com.corejsf.RegexValidatorTag
empty
expression
java.lang.String
errorSummary
java.lang.String
errorDetail
java.lang.String