Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

14
respostas

Erro com Bean Validation

Não estou conseguindo validar, fiz todas as configurações, porém o sistema ainda permite gravar mesmo anotado como @NotNull

<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>
    @NotNull(message="campo.obrigatorio")
    private String nomeUsuario;
    @NotNull(message="campo.obrigatorio")
    @Size(min=5)
    private String cartSUS;
@RequestMapping("/usuario")
    public String gravar(@Valid Usuario usuario, BindingResult result){

        if(usuarioDAO.comparar(usuario)){
            System.out.println("Usuario já existente!");
            return "formUsuario";
        } else{
            if(result.hasErrors()){
                return "formUsuario";
                }
                usuarioDAO.gravar(usuario);
                return "ok";
        }    
    }
14 respostas

Você precisa usar a NotEmpty :). O valor não vem nulo, vem vazio na String.

NotEmpty é a junção do @Size e @NotNull ? se for isso eu já fiz e mesmo assim não funciona. @NotEmpty não me aparece.

Vc deve ter o hibernate validator aí, eu usaria a NotBlank, na verdade :). Ela verifica se tá nulo e se tá diferente de vazio. De todo jeito, da uma olhada no devtools do navegador se o valor tá indo vazio mesmo.

estava validando com essa dependencia..

javax.validation validation-api 1.1.0.Final

baixei a do hibernate e funcionou corretamente.. vlw

ele utiliza da mesma forma para apresentar na jsp? a mensagem de erro não está apresentando.. é validado e não grava, porém no retorno para jsp não apresenta o erro.

Vc tá referênciando uma variável que supostamente chama Usuário, com u maiúsculo, ela existe no request? Meu chute eh que deve ser usuário com u minúsculo.

Rapaz.. troquei para "usuario" e mesmo assim não foi. É validado tudo certinho, dou um sysout para aparecer a mensagem no console e aparece... mas na jsp não aparece. o que poderia ser?

Olhando o código, eu não vejo o erro, sendo sincero... Eu daria um syso no if do hasErrors com o seguinte código:

System.out.println(bindingResult.getFieldErrors());

Aí vai aparecer inclusive o nome completo dos campos que estão com erros.. confere se ta igual a sua tag de erros.

tentei..mesmo assim não deu certo...

Field error in object 'usuario' on field 'nomeUsuario': rejected value []; codes [NotBlank.usuario.nomeUsuario,NotBlank.nomeUsuario,NotBlank.java.lang.String,NotBlank]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [usuario.nomeUsuario,nomeUsuario]; arguments []; default message [nomeUsuario]]; default message [Não pode estar em branco]
<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"></form:errors>    
                </div>
                <div>
                    <label>Cartão SUS</label> 
                    <input type="text" class="form-control"    name="cartSUS" />
                    <form:errors path="usuario.CartSUS"/>    
                </div>

Bom, não sei qual eh o problema. Experimenta tb fechar a tag errors nela mesma.

Ah, apenas um chute. Vc tá usando a tag de form do spring, mas não usa as tags de input dele... Talvez a tag de erro esteja usando a tag de form pra referenciar o o objeto validado. Deixa um form HTML normal.

mas aí eu tenho o problema do cookie, se não usar esse form ele apresenta o erro ao tentar salvar o formulário.

Erro do csrf? Então usa o commandName do form. Coloca usuario nele... E tira usuario das tags de erro. Vai ter que adicionar um usuario no modelandview que vai para o form tb.

deu certo... porém não posso colocar um redirect para o form neh? o erro não apresenta. Precisava redirecionar para o form novamente por conta de alguns list que coloquei no modelandview