p/ mostrar // if (C.getNome()==null || C.getNome().trim().length()==0){// errors.rejectValue("nome", "nome.required", "Nome e obrigatorio");//// } ValidationUtils.rejectIfEmptyOrWhitespace(errors, "nome", "nome.empty","Nome e obrigatorio"); ValidationUtils.rejectIfEmptyOrWhitespace(errors, "telefone", "telefone.empty","Telefone e obrigatorio"); // if (errors.hasErrors()){// System.out.println(errors);// } } 2) Chamando o validador no form de edicao do contatoI) No springlesson07.view.contato.frameEditaContato.java vamos modificar a funcaoprivate void salvarContato(), observe que a solucao de validacao manual esta comentada e a explicacao coloquei em etapas . private void salvarContato() { Contato C = new Contato(); //Solucao 1 : validacao manual // String preMessage = "Verifique os seguintes erros:\n";// String message = "";//// if ("".equals(jTFNome.getText())) {// message += "- Nome deve ser preenchido \n";// }// System.out.println(message.length()+"");// if (message.length() == 0) { //Solucao 2 - com o Spring // etapa 1 - Carga no objeto if ("".equals(jTFId.getText())) { C.setId(0); } else { C.setId(Integer.parseInt(jTFId.getText())); C.setNome(jTFNome.getText()); C.setTelefone(jTFTelefone.getText()); } //etapa 2 chama nosso validador de Pessoa ContatoValidator CV = new ContatoValidator(); //etapa 3 criamos um objeto result passando o nosso Contato apos a carga BeanPropertyBindingResult result = new BeanPropertyBindingResult(C, "Contato"); //etapa 4 chamamos o validador do spring , que pode ou nao conter error ValidationUtils.invokeValidator(CV, C, result); //etapa 5 - se nao tiver erros entra no bloco que salva if (result.getErrorCount() == 0) { this.contato = C; try { this.getDao().salvar(this.getContato()); System.out.println("Salvando Contato:" + C.getNome()); this.getFlC().atualizaGrade(); this.dispose(); } catch (java.lang.NullPointerException npe) { System.out.println("Erro ao Salvar o Contato."); Logger.getLogger(frameEditaContato.class.getName()).log(Level.SEVERE, null, npe); } } else { //etapa 6 - se tiver error comeca a mostrar no console System.out.println("Total de erros : " + result.getErrorCount()); System.out.println("-------------------------------------------------"); //etapa 7 - String p/ conter os erros e mostrar num jOptionPane p/ o usuario String errosGui=""; //etapa 8 - criamos uma lista p/ conter os erros List<ObjectError> allObjectErrors = result.getAllErrors(); //etapa 9 varremos os erros for (ObjectError objectError : allObjectErrors) { if (objectError instanceof FieldError) { FieldError fieldError = (FieldError) objectError; System.out.println("O campo e: " + fieldError.getField()); } System.out.println("Codigo " + Arrays.asList(objectError.getCodes()).toString()); System.out.println("Codigo de erro: " + objectError.getCode()); System.out.println("Mensagem Default: " + objectError.getDefaultMessage()); System.out.println(); errosGui+="- " + objectError.getDefaultMessage()+ "\n"; } // fim da etapa 9 System.out.println("-------------------------------------------------"); // etapa 10 - Informando o usuario JOptionPane.showMessageDialog(null, "Erros ao salvar.Mais detalhes, veja o console.\n" + errosGui ); }// } else {// JOptionPane.showMessageDialog(null, preMessage + message);// } }// ao final sua classe deve conter esses imports :import java.util.Arrays;import java.util.List;import java.util.logging.Level;import java.util.logging.Logger;import javax.swing.JOptionPane;import org.springframework.validation.BeanPropertyBindingResult;import org.springframework.validation.FieldError;import org.springframework.validation.ObjectError;import org.springframework.validation.ValidationUtils;import springlesson07.dao.ContatoDAO;import springlesson07.model.Contato;import springlesson07.validators.ContatoValidator; II) Teste o programa : Tente criar um novo Contato e salvar sem preencher nada:o resultado deve ser esseFigura 03 - Teste com validacao do SpringObserve o output no console do NB : run:Sep 23, 2012 2:34:25 PM org.springframework.context.support.AbstractApplicationContext prepareRefreshINFO: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@669980d5: startup date [Sun Sep 23 14:34:24 BRT 2012]; root of context hierarchySep 23, 2012 2:34:25 PM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitionsINFO: Loading XML bean definitions from class path resource [beans-definitions.xml]Sep 23, 2012 2:34:25 PM org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletonsINFO: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@5470be88: defining beans [dataSource,jdbcTemplate,ContatoDao]; root of factory hierarchySep 23, 2012 2:34:25 PM org.springframework.jdbc.datasource.DriverManagerDataSource setDriverClassNameINFO: Loaded JDBC driver: com.mysql.jdbc.DriverSep 23, 2012 2:34:26 PM org.springframework.jdbc.datasource.SingleConnectionDataSource initConnectionINFO: Established shared JDBC Connection: com.mysql.jdbc.JDBC4Connection@63779885Total de erros : 2-------------------------------------------------O campo e: nomeCodigo [nome.empty.Contato.nome, nome.empty.nome, nome.empty.java.lang.String, nome.empty]Codigo de erro: nome.emptyMensagem Default: Nome e obrigatorioO campo e: telefoneCodigo [telefone.empty.Contato.telefone, telefone.empty.telefone, telefone.empty.java.lang.String, telefone.empty]Codigo