Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Passar mensagem de erro @NotEmpty para o JSP

Teria como eu poderia passar essa mensagem de erro para ser exibida no jsp?

@NotEmpty(message = "Nome nao pode ser vazio")
    private String nome;

O JSP esta atualmente assim

<html>
<head>
<meta charset=UTF-8>
<title>Bit Bank</title>
</head>
<body>
    <h1>Bit Bank</h1>
    <form:form action="/bitbank/cliente/cadastrar"   method="post">
        <div>
            <label>Nome</label> 
            <input type="text" name="titular.nome" />
            <form:errors path="titular.nome" />
        </div>
        <div >
            <label>Rg</label> 
            <input type="text" name="titular.rg" />
            <form:errors path="titular.rg" />
        </div>
        <div>
            <label>CPF</label> 
            <input type="text" name="titular.cpf" />
            <form:errors path="titular.cpf" />
        </div>
        <div>
            <label>Agencia</label> 
            <input type="text" name="conta.agencia" />
            <form:errors path="conta.agencia.nome" />
        </div>
        <div>
            <label>Numero da conta</label> 
            <input type="text" name="conta.numero" />
            <form:errors path="conta.numero.nome" />
        </div>

        <button type="submit">Cadastrar</button>
    </form:form>

</body>
</html>

Eu quero deixar igual o foi mostrado no video, ao enviar o formulário voltar com essa mensagem.

3 respostas

Bryan, quando você usa as taglibs do spring na jsp, elas se integram a bean validation ai refletem a mensagem da annotation!

O meu jsp não esta recebendo o erro para informar, nem pelo metodo do video nem pelo @NotEmpty. Aparentemente esta tudo certo no Contoller, mas não sei dizer o que pode estar acontecendo, poderia me ajudar?

package br.com.bitbank.controller;

import java.util.List;

import javax.validation.Valid;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;

import br.com.bitbank.daos.ClienteDAO;
import br.com.bitbank.modelo.Cliente;
import br.com.bitbank.valida.ClienteValidation;

@Controller
@RequestMapping("/cliente")
public class ClienteController {

    @Autowired
    private ClienteDAO clienteDao;

    @InitBinder
    public void initBinder(WebDataBinder binder) {
        binder.addValidators(new ClienteValidation());
//        binder.addValidators(new TitularValidation());
    }

    @RequestMapping(value = "/cadastrar", method = RequestMethod.GET)
    public ModelAndView form() {
        ModelAndView modelAndView = new ModelAndView("cliente/form");
        return modelAndView;
    }

    @RequestMapping(value = "/cadastrar", method = RequestMethod.POST)
    public ModelAndView gravar(@Valid Cliente cliente, BindingResult result,
            RedirectAttributes redirectAttributes) { //@validated tambem nao muda nada

        if (result.hasErrors()) {
            System.out.println("0" +result.getFieldErrors());
            return form();
        }
        System.out.println(cliente.getConta().getAgencia());
        System.out.println(cliente.getConta().getNumero());
        clienteDao.gravar(cliente);
        redirectAttributes.addFlashAttribute("sucesso", "Cliente cadastrado com sucesso!");
        return new ModelAndView("redirect:lista");
    }

    @RequestMapping(value = "/lista")
    public ModelAndView lista() {
        List<Cliente> cliente = clienteDao.listar();
        ModelAndView modelAndView = new ModelAndView("cliente/lista");
        modelAndView.addObject("cliente", cliente);
        return modelAndView;
    }

}

recebo isso como mensagem

0[Field error in object 'cliente' on field 'titular.nome': rejected value []; codes [field.required.cliente.titular.nome,field.required.titular.nome,field.required.nome,field.required.java.lang.String,field.required]; arguments []; default message [null]]

nao mudei nada no jsp que postei primeiro

@Bean
    public MessageSource messageSource(){
        ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
        messageSource.setBasename("/WEB-INF/messages");
        messageSource.setDefaultEncoding("UTF-8");
        messageSource.setCacheSeconds(1);
        return messageSource;
    }

messages.propeties

field.required = Campo é obrigat�rio
field.required.titular.nome = O Campo nome é obrigat�rio
field.required.cliente.titular.nome = O Campo nome é obrigat�rio
field.required.titular.rg = O Campo nome é obrigat�rio
field.required.titular.cpf = O Campo nome � obrigat�rio
field.required.conta.agencia = O Campo nome � obrigat�rio
field.required.conta.numero = O Campo nome � obrigat�rio
typeMismatch = O tipo de dado foi inv�lido
solução!

O projeto no GitHub https://github.com/BryanMotta/FormacaoJava

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software