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