1
resposta

Mensagens de erro para o usuário

Como posso fazer para enviar alertas para o usuário na tela. Por exemplo: Tenho um método que verifica se o cartão já é cadastrado, caso seja gostaria que retornasse para tela do formulário e que exibisse essa mensagem. Como faço pra pegar esse resultado e apresentar no formulário. Estou usando JSP.

    @RequestMapping("/usuario")
    public String gravar(@Valid Usuario usuario, BindingResult result){

        if(usuarioDAO.comparar(usuario)){
            System.out.println("Cartão do SUS já existente!");
            return "formUsuario";
        } else{
            if(result.hasErrors()){
                return "formUsuario";
                }
                usuarioDAO.gravar(usuario);
                return "ok";
        }    
    }
<fieldset>
            <legend>Cadastro de Usuário</legend>
            <form:form servletRelativeAction="/agendapsf/usuario" method="POST">
                <div>
                    <label>Nome</label> 
                    <input type="text" class="form-control" placeholder="Nome do usuário" name="nomeUsuario" />    
                    <form:errors path="Usuario.nomeUsuario"/>                    
                </div>
                <div>
                    <label>Cartão SUS</label> 
                    <input type="text" class="form-control"    name="cartSUS" />
                    <form:errors path="Usuario.CartSUS"/>    
                </div>
1 resposta

Olá Felipe,

Na sua action você pede um Usuario validado e usa o BindingResult, objeto que representa os resultados do processo de binding (validação, conversões, etc)

A interface BindingResult te da a opção de usar alguns métodos legais pra adicionar erros de validação.

Você, por exemplo, na action, poderia adicionar um erro de validação pra algum atributo da classe Usuario (o que presumo que esteja fazendo na propria classe Usuario com annotatins de validação da Bean Validation) com o método rejectValue(String field, String errorCode, Strind defaultMessage). Ou se preferir (no caso da validação do cartão) poderia usar o método reject(String errorCode, String defaultMessage);

Em ambos os casos você consegue pegar a mensagem de validação específica com form:errors path="...". Se o erro foi adicionado a um atributo pode usar path="Usuario.atributo", senão, pode usar path="errorCode" pro caso de usar o método reject.

De qualquer maneira, como dica final, o método compara nesse contexto acaba sendo um método de validação. Se quiser organizar ainda mais sua action poderia utilizar um Validator do Spring pra extrair esse código da action.

Dê uma olhada no documentação da Validator do Spring: - http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/validation/Validator.html - http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#validator

Abraço