Validação no SpringFramework

2 respostas
M

Bom dia, Amigos do GUJota!!!
Aqui estou eu de novo a solicitar a sempre tão gentil e solícita colaboração de vocês! Desta vez estou com uma aplicação em Spring para fazer a manutenção. Não sei muita coisa sobre este framework, mas o pouco que aprendi veio de [url]http://maestric.com/en/doc/java/spring/[/url], principalmente.
Consegui criar o controller, recebe por injeção o bean e faz o que tem de ser feito. na hora de validar, segui o modelo proposto em [url]http://maestric.com/en/doc/java/spring/form_validation[/url], mas agora o form não valida mesmo quando os dados estão em formato aceitável.

Seguem alguns sources:

O formBean:
package mail;
public class RecommendationFormBeanImpl implements RecommendationFormBean {
	private String toName;
	private String toMail;
	private String fromName;
	private String fromMail;
	private String message;
	private String productCode;
	
	public String getProductCode() {
		return productCode;
	}

	public void setProductCode(String productCode) {
		this.productCode = productCode;
	}

	public String getMessage() {
		return message;
	}

	public void setMessage(String message) {
		this.message = message;
	}

	public RecommendationFormBeanImpl(){
		
	}

	public String getToName() {
		return toName;
	}

	public void setToName(String toName) {
		this.toName = toName;
	}

	public String getToMail() {
		return toMail;
	}

	public void setToMail(String toMail) {
		this.toMail = toMail;
	}

	public String getFromName() {
		return fromName;
	}

	public void setFromName(String fromName) {
		this.fromName = fromName;
	}

	public String getFromMail() {
		return fromMail;
	}

	public void setFromMail(String fromMail) {
		this.fromMail = fromMail;
	}
}
O Validator:
package mail;

import org.apache.log4j.Logger;
import org.springframework.validation.Errors;
import org.springframework.validation.Validator;
import org.springframework.validation.ValidationUtils;

public class RecommendationValidator implements Validator {
	public RecommendationValidator (){
		
	}

	public boolean supports(Class aSupposedRecommendation) {
		return RecommendationFormBeanImpl.class.equals(aSupposedRecommendation);
	}

	public void validate(Object recommendationAsAnObject, Errors errors) {
		RecommendationFormBean recommendation = (RecommendationFormBean) recommendationAsAnObject;
		ValidationUtils.rejectIfEmptyOrWhitespace(errors, "fromName", "field.required", "Campo requerido");
		RecommendationValidator.validateMail(recommendation.getFromMail(), errors);
		ValidationUtils.rejectIfEmptyOrWhitespace(errors, "toName", "field.required", "Campo requerido");
		RecommendationValidator.validateMail(recommendation.getToMail(), errors);
		ValidationUtils.rejectIfEmptyOrWhitespace(errors, "productCode", "field.required", "Campo requerido");
	}

	public static synchronized void validateMail(String mail, Errors errors) {
		ValidationUtils.rejectIfEmptyOrWhitespace(errors, "fromMail", "field.required", "Campo Requerido");
		if ( ! errors.hasFieldErrors("fromMail")) {
			if (mail.indexOf("@") < 2 || mail.indexOf("@") >= mail.length() - 6 || mail.indexOf(".") < 5 || mail.indexOf(".") >= mail.length() - 3 || mail.length() <= 8){
				errors.rejectValue("fromName", "not_zero", "Formato inválido para Email!");
				Logger.getLogger(RecommendationValidator.class).info("Babou!!!");
			}
		}			
	}
}
O XML do formBean:
<bean id="recommendationController"
		class="mail.RecommendationControllerImpl"
		parent="abstractEpFormController">
		<property name="validator">
			<bean class="mail.RecommendationValidator" />
		</property>
		<property name="commandName">
			<value>recommendationFormBean</value>
		</property>
		<property name="commandClass">
			<value>
				mail.RecommendationFormBeanImpl
			</value>
		</property>
		<property name="formView">
			<value>recommendationForm</value>
		</property>
		<property name="successView">
			<value>index</value>
		</property>
	</bean>
Detalhe. A GUI é feita com velocity! Se alguém puder ajudar agradeço bastante!!! Aquele abraço!!! San

2 Respostas

quebrado

Como ta a sua Jsp! tava me ferrando com isto outro dia e estava errado o jsp!
manda ae!

t+

M

Tem JSP não! É velocity!!!
Mas não esquenta! Já resolvi! Ficou assim

O validator:
public class RecommendationValidator implements Validator {
	public RecommendationValidator (){
		
	}

	public boolean supports(Class aSupposedRecommendation) {
		return RecommendationFormBeanImpl.class.equals(aSupposedRecommendation);
	}

	public void validate(Object recommendationAsAnObject, Errors errors) {
		RecommendationFormBean recommendation = (RecommendationFormBean) recommendationAsAnObject;
		ValidationUtils.rejectIfEmptyOrWhitespace(errors, "fromName", "field.required", "Campo requerido");
		RecommendationValidator.validateMail(recommendation.getFromMail(), "fromMail", errors);
		ValidationUtils.rejectIfEmptyOrWhitespace(errors, "toName", "field.required", "Campo requerido");
		RecommendationValidator.validateMail(recommendation.getToMail(), "toMail", errors);
		ValidationUtils.rejectIfEmptyOrWhitespace(errors, "productCode", "field.required", "Campo requerido");
	}

	public static synchronized void validateMail(String mail, String fieldName, Errors errors) {
		ValidationUtils.rejectIfEmptyOrWhitespace(errors, fieldName, "field.required", "Campo Requerido");
		if ( ! errors.hasFieldErrors(fieldName)) {
			if (mail.indexOf("@") < 2 || mail.indexOf("@") >= mail.length() - 6 || mail.indexOf(".") < 5 || mail.indexOf(".") >= mail.length() - 3 || mail.length() <= 8){
				errors.rejectValue(fieldName, "field.required", "Formato inválido para Email!");
			}
		}			
	}
}
O XML
<bean id="recommendationController"
		class="mail.RecommendationControllerImpl"
		parent="abstractEpFormController">
		<property name="validator">
			<!--  bean class="mail.RecommendationValidator" /-->
			<ref bean="recommendationValidator" />
		</property>
		<property name="commandName">
			<value>recommendationFormBean</value>
		</property>
		<property name="commandClass">
			<value>
				mail.RecommendationFormBeanImpl
			</value>
		</property>
		<property name="formView">
			<value>recommendationForm</value>
		</property>
		<property name="successView">
			<value>index</value>
		</property>
	</bean>

Note que validator que tinha um bean para instanciar recebeu uma referência de um bean que é mapeado noutro canto, não sei porque, mas só funciona assim!
Obrigado pela ajuda e até breve!!!!
San

Criado 8 de agosto de 2008
Ultima resposta 8 de ago. de 2008
Respostas 2
Participantes 2