Estou tentando criar um projeto similiar para aplicar as atividades desse curso, porém estou tendo problemas em fazer as mensagens de erro aparecerem na página de formulário. Segue aqui os códigos
criaContaFrom.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form" %>
<%@ taglib uri="http://www.springframework.org/tags" prefix="spring" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>MyBank - Nova conta</title>
</head>
<body>
<h1>Criar uma nova conta</h1>
<div>${erro}</div>
<form:form action="${spring:mvcUrl('CC#gravar').build()}" method="post" modelAttribute="conta">
<div>
<label>Nome do titular</label><br> <input type="text"
name="titular">
<form:errors path="titular" />
</div>
<div>
<label>CPF</label><br> <input type="text" name="cpf">
<form:errors path="cpf" />
</div>
<label>Tipo de conta</label>
<form:errors path="categoria" />
<br>
<input type="radio" name="categoria" value="normal"> Normal <br>
<input type="radio" name="categoria" value="especial"> Especial<br>
<input type="radio" name="categoria" value="personified"> Personified<br>
<div>
<label>Senha</label>
<form:errors path="senha" />
<br> <input type="password" name="senha">
</div>
<div>
<label>Confirmar a senha</label><br> <input type="password"
name="senhaConfirma">
</div>
<button type="submit">Criar conta</button>
</form:form>
</body>
</html>
ContaController.java
package br.com.guiga.MyBank.controllers;
//Imports ocultados
@Controller
public class ContaController {
@Autowired
private ContaDAO cdao;
@InitBinder
public void initBinder(WebDataBinder webDataBinder) {
webDataBinder.addValidators(new ValidadorDadosConta());
}
@RequestMapping("/criar-conta")
public String form() {
return"criaContaForm";
}
@RequestMapping("/lista-contas")
public ModelAndView listar() {
List<Conta> lista = cdao.listar();
ModelAndView mv = new ModelAndView("/lista");
mv.addObject("contas", lista);
return mv;
}
@RequestMapping("/verificador")
public ModelAndView gravar(String senha, String senhaConfirma, @Valid Conta c, BindingResult br, RedirectAttributes ra) {
c.setSenha(senha);
c.setSenhaConfirma(senhaConfirma);
if (br.hasErrors()) {
ra.addFlashAttribute("erro", "Informações incorretas, por favor verifique e tente novamente!");
return new ModelAndView("redirect:criar-conta");
} else {
c.setSaldo(0.0);
cdao.gravar(c);
return new ModelAndView("sucesso");
}
}
}
ValidadorDadosConta.java
package br.com.guiga.MyBank.valid;
//Imports ocultados
public class ValidadorDadosConta implements Validator{
@Override
public boolean supports(Class<?> clazz) {
return Conta.class.isAssignableFrom(clazz);
}
@Override
public void validate(Object target, Errors errors) {
Conta c = (Conta) target;
System.out.println("Validando...");
ValidationUtils.rejectIfEmpty(errors, "titular", "field.required");
ValidationUtils.rejectIfEmpty(errors, "cpf", "field.required");
ValidationUtils.rejectIfEmpty(errors, "senha", "field.required");
ValidationUtils.rejectIfEmpty(errors, "categoria", "field.required");
ValidationUtils.rejectIfEmpty(errors, "senhaConfirma", "field.required");
if(c.getCpf().length() != 11) {
System.out.println("Foi o CPF");
errors.rejectValue("cpf", "field.incorrect");
}
if(!c.getSenha().equals(c.getSenhaConfirma())) {
System.out.println("Foi a senha!");
errors.rejectValue("senhaConfirma", "field.incorrect");
}
}
}
AppWebConfig.java
package br.com.guiga.MyBank.configs;
//Imports ocultados
@EnableWebMvc
@ComponentScan(basePackageClasses = { HomeController.class, ContaController.class, ContaDAO.class })
public class AppWebConfig {
@Bean
public InternalResourceViewResolver internalResourceViewResolver() {
InternalResourceViewResolver resolvedor = new InternalResourceViewResolver();
resolvedor.setPrefix("/WEB-INF/views/");
resolvedor.setSuffix(".jsp");
return resolvedor;
}
@Bean
public MessageSource messageSource() {
ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
messageSource.setBasename("/WEB-INF/messages");
messageSource.setDefaultEncoding("UTF-8");
messageSource.setCacheSeconds(1);
return messageSource;
}
}