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

Menssagem não aparece

Fiz o mesmo exemplo em outro programa, se eu redireciono para mesma pagina a menssagem do flash aparece, porem se redireciono para o form de login por exemplo não aparece nada.

minha controller:

@RequestMapping(value = "/cadastro", method = RequestMethod.POST)
    public ModelAndView gravar(@Valid Usuario usuario, BindingResult result, RedirectAttributes redirectAttributes) {
        if (result.hasErrors()) {
            System.out.println(result.getAllErrors());
            System.out.println(usuario);
            return cadastro(usuario);
        }

        List<Usuario> emailBd = usuarioDAO.find();

        System.out.println(emailBd);
        // System.out.println(usuario);

        for (Usuario usuariobd : emailBd) {

            if (usuariobd.getEmail().equals(usuario.getEmail())) {

                redirectAttributes.addFlashAttribute("sim", "Usuario já cadastrado");
                return new ModelAndView("redirect:/usuario/cadastro");

            }

        }

        if (usuario.getEmail().equals("")) {
            System.out.println("vazio");
            redirectAttributes.addFlashAttribute("sim", "Preencha os campos");
            return new ModelAndView("redirect:/usuario/cadastro");
        } else {

            usuarioDAO.gravar(usuario);
            redirectAttributes.addFlashAttribute("nao", "Cadastrado com sucesso");

            return new ModelAndView("redirect:/loginForm");
        }
    }

e a view

<body>    

        <c:if test="${not empty nao}">
            <div class="sucess">${nao}</div>
        </c:if>

        <div class="row">

            <div class="col-sm-6" id="login">
                <h1>Já possui acesso?</h1>

                <form:form method="Post" commandName="usuario">
                    <div class="form-group">
                        <label><span class="glyphicon glyphicon-user"></span>
                            Login</label> <input autofocus="autofocus" name="username" type="text"
                            class="form-control" placeholder="Digite o e-mail"
                            style="height: 50px" />
                        <form:errors path="username"></form:errors>
                    </div>
                    <div class="form-group">
                        <label><span class="glyphicon glyphicon-eye-open"></span>
                            Senha</label> <input type="password" name="password" class="form-control"
                            placeholder="Digite a senha" style="height: 50px">
                    </div>

                    <button id="btnLogin" type="submit" class="btn btn-success">
                        Logar</button>

                    <a id="btnCadastro" type="submit" class="btn btn-info"
                        href='<c:url value="/usuario/cadastro" />'> Cadastrar</a>

                </form:form>

            </div>


        </div>

    </div>



</body>
7 respostas

Diego, a view que vc mandou é a de login. Pode mostrar a de cadastro?

Reparei que você testa a variável nao e a imprime, mas não encontrei referência à variável sim, que também contém mensagens para o usuário. Pode conferir isso?

Existem outros comentários que podemos discutir sobre o código se quiser, como boas práticas a seguir e um pouco de otimização que pode te ajudar, mas se for o caso seria melhor abrir outro tópico específico para isso.

=) Esperando resposta

então marco: a mensagem de não e para quando não é cadastrado ai ao cadastrar ele redireciona para o form login e tem que printar essa msg, a mensagem de sim ela vai imprimir na própria view de cadastro para quando o usuário já esta cadastrado, e sobre as dicas eu quero sim, estou começando agora em desenvolvimento web, então todo conhecimento é valido. deseja que abra outro tópico? sobre o que?

form cadastro


<body>





    <div class=" text-center" style="margin-top: 20px"></div>

    <div class="container-fluid text-center">
        <c:if test="${not empty sim}">
            <div class="error">${sim}</div>
        </c:if>
        <%--         <c:if test="${not empty nao}"> --%>
        <%--             <div class="sucess">${nao}</div> --%>
        <%--         </c:if> --%>
        <div class="row">
            <div class="col-sm-4 sidenav"></div>

            <div class="col-sm-4 text-left" id="cadastro">


                <h1>Cadastro</h1>
                <form:form action="${ s:mvcUrl('UC#gravar').build() }" method="post"
                    commandName="usuario">
                    <div>

                        <label><span class="glyphicon glyphicon-user logo"></span>
                            Login</label>
                        <form:input cssClass="input form-control" path="email" id="email"
                            type="text" class="form-control" placeholder="Digite o login" />
                        <form:errors cssClass="obrigatorio" path="email"></form:errors>

                    </div>
                    <div>

                        <label><span class="glyphicon glyphicon-eye-open logo"></span>
                            Senha</label>
                        <form:input path="senha" type="password"
                            class="input form-control" placeholder="Digite a senha" />
                        <form:errors cssClass="obrigatorio" path="senha"></form:errors>

                    </div>

                    <div>

                        <label><span class="glyphicon glyphicon-sunglasses logo"></span>
                            Nome</label>
                        <form:input path="nome" type="text" class="input form-control"
                            placeholder="Digite o nome" />
                        <form:errors cssClass="obrigatorio" path="nome"></form:errors>

                    </div>
                    <div>

                        <button id="btnformCadastro" type="submit"
                            class="btn btn-info form-control">Cadastrar</button>
                    </div>
                </form:form>
            </div>
            <div class="col-sm-4 sidenav"></div>
        </div>
    </div>


</body>
</html>

@Diego, pelo que vi você ainda não passou por alguns tópicos que falam sobre o que eu iria comentar, então acho que é melhor você continuar seguindo a dinâmica das aulas e ir aprendendo aos poucos. =)

Dois comentários que posso fazer aqui direto são:

  • Sempre dê nomes bem explícitos pra suas variáveis! Ao invés de chamar uma variável de sim ou nao, chame de mensagemDeErro ou mensagemDeSucesso. Fará sua experiência melhorar quando estiver trabalhando em outros trechos do projeto e de repente precisar refatorar alguma coisa nesse pedaço específico. Dá um pouco mais de trabalho mas vale muito a pena. ^^
    • Só uma besteirinha, mas a String java tem um método que diz se ela está vazia, então não precisa comparar com uma String vazia: usuario.getEmail().equals(""). Pode usar usuario.getEmail().isEmpty(). Fica um pouquinho mais legível e menos suscetível a erros. ;)

Quanto ao seu problema com o redirect, eu não consegui identificar o erro. Li algumas vezes e parece tudo nos conformes. Não tenho certeza, mas acho que o flash só dura um redirect. Pode ser que esteja havendo um duplo redirecionamento na sua lógica, e a mensagem se perde. Pode conferir isso? Se conseguir rodar o sistema em modo de debug, tente acompanhar o conteúdo do redirectAttributes ao longo da sua requisição, pode ser que ajude também.

Se nada ajudar, vou chamar pro tópico alguém um pouco mais especialista!

deixei as msg como falou e alterei o metodo para testar deixando so assim e mesmo assim não funciona, se for sem redirect a msg aparece, com não

@RequestMapping(value = "/cadastro", method = RequestMethod.POST)
    public ModelAndView gravar(@Valid Usuario usuario, BindingResult result, RedirectAttributes redirectAttributes) {

        redirectAttributes.addFlashAttribute("CadastradocomSucesso", "Cadastrado com sucesso");

        return new ModelAndView("redirect:/loginForm");

    }

e a msg ficou assim

    <c:if test="${not empty CadastradocomSucesso}">
            <div class="sucess">${CadastradocomSucesso}</div>
        </c:if>
solução!

consegui aqui Marco, refiz o codigo e testei e estava deixando passar o uri do redirect q estava assim

return new ModelAndView("redirect:/loginForm");

e mudei

return new ModelAndView("redirect:/login");

das duas formas ele redirecionava para a view de login mas so essa ultima que mostrou a msg. eu refatorei como falou e vou manter assim o codigo obrigado pelas dicas.

Ae! Legal, que bom que conseguiu descobrir. =]

Estamos sempre às ordens para o que precisar! Continue participando e fazendo nossa comunidade crescer!

=D e bons estudos!