Hibernate Validator x Constraint

Tem como tratar uma Constraint Unique com o Hibernate Validator, para exibir alguma mensagem ao invés de uma página de erro ? Por exemplo o campo USERNAME da tabela usuários.

Valew.

Velho, o jeito que pensei é que vc poderia criar um Annotation sua, para o hibernate validator, vc que tem que implementar uma interface Validator acho e criar a annotation apontando qual classe é responsável pela validacao. Nessa annotation vc poderia testar a unicidade do campo que esta atualizado e dar sua mensagem personalizada. Por sinal acho que vou fazer isso.

Alberto

[quote=alots_ssa]Velho, o jeito que pensei é que vc poderia criar um Annotation sua, para o hibernate validator, vc que tem que implementar uma interface Validator acho e criar a annotation apontando qual classe é responsável pela validacao. Nessa annotation vc poderia testar a unicidade do campo que esta atualizado e dar sua mensagem personalizada. Por sinal acho que vou fazer isso.

Alberto[/quote]

Teria algum exemplo ou pode indicar onde posso achar algo que me ensine o caminho das pedras ?

Valew.

Annotation

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

import org.hibernate.validator.ValidatorClass;

import beanvalidator.validations.validator.RequiredValidator;




@ValidatorClass(RequiredValidator.class)
@Target(value={ElementType.FIELD,ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Required {

	String message() default "{validator.required}";	
}

Classe:

public class RequiredValidator implements org.hibernate.validator.Validator<Required>,PropertyConstraint,Serializable {

	public void initialize(Required arg0) {
		// TODO Auto-generated method stub
		
	}

	public boolean isValid(Object value) {
		// TODO Auto-generated method stub
		boolean resultado = false;
		
		if(value==null){
			return resultado;
		}
		
		if(value instanceof String){
			String stringValue = (String)value;
			if(stringValue.trim().equals("")){				
				return resultado;
			}
			else{
				resultado = true;
			}
		}
		else{
			if ( value.getClass().isArray() ) {
				return Array.getLength( value ) &gt 0;
			}
			else if ( value instanceof Collection ) {
				return ( (Collection) value ).size() &gt 0;
			}
			else if ( value instanceof Map ) {
				return ( (Map) value ).size() &gt 0;
			}	
		}
		return resultado;
	}
	
	
	/**
	 * Copiei este metodo do NotEmptyValidator, pois vejo a mesma aplicabilidade.
	 */
	@SuppressWarnings("unchecked")
	public void apply(Property property) {
		if ( ! ( property.getPersistentClass() instanceof SingleTableSubclass )
				&& ! ( property.getValue() instanceof Collection ) ) {
			//single table should not be forced to null
			if ( !property.isComposite() ) { //composite should not add not-null on all columns
				Iterator<Column> iter = (Iterator<Column>) property.getColumnIterator();
				while ( iter.hasNext() ) {
					iter.next().setNullable( false );
				}
			}
		}
	}

Espero que ajude.

Alberto