JSF Validator personalizado com passagem de parâmetros

4 respostas
L

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,

<?xml version="1.0" encoding="UTF-8"?> com.corejsf.CreditCard com.corejsf.CreditCardConverter payment com.corejsf.PaymentBean session com.corejsf.CreditCard com.corejsf.CreditCardValidator com.corejsf.Regex com.corejsf.RegexValidator
<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



4 Respostas

D

Como vc está chamando isso na view?

Já tentou tirar o pacote na identificação do validator? Ex:

<validator-id>CreditCard</validator-id>
fwbrasil

Por favor, formule melhor sua pergunta. Uma informação indispensável é o erro que está obtendo, senão fica difícil ajudar.

L

fwbrasil, minha dúvida é como usar um validator passando um parâmetro.

Tenho uma situação q preciso validar uma condição genérica, através de um id de uma tabela.

Com um validator comum, tratarei um validator para cada linha de minha tabela. Se eu conseguir enviar um parâmetro, terei um validator para tudo.

Brigadão pela ajuda. (espero ter melhorado)

Perdão davidpadilha,esqueci do jsp:

<f:view>





<h:outputText value="#{msgs.title}" />





<h:form>

<h:outputText value="#{msgs.enterPayment}" />


<h:panelGrid columns=“2”>
<h:outputText value="#{msgs.amount}" />
<h:inputText id=“amount” value="#{payment.amount}">
<f:convertNumber minFractionDigits=“2” />
</h:inputText>
<h:outputText value="#{msgs.creditCard}" />
		<h:inputText id="card" value="#{payment.card}" required="true">
			<corejsf:validateRegex expression="[3-6].*" errorDetail="#{msgs.unknownType}" />
		</h:inputText>

		<h:outputText value="#{msgs.expirationDate}" />
		<h:inputText id="date" value="#{payment.date}">
			<f:convertDateTime pattern="MM/yyyy" />
		</h:inputText>
	</h:panelGrid>
	<h:messages styleClass="errorMessage" showSummary="false" showDetail="true" />
	<br />
	<h:commandButton value="Process" action="process" />
</h:form>
</body>

</f:view>

L

Caros,

Alguém já conseguiu fazer este ValidatorELTag funcionar?

Criado 18 de julho de 2008
Ultima resposta 18 de jul. de 2008
Respostas 4
Participantes 3