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

Alterei minha Action adicionaConta pare redirecionar para listaContas

Na minha Action de adicionaConta, alterei para quando adicionar, redirecionar para a lista de contas, mas está dando a seguinte mensagem:

The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing).

Segue como está minha Action no ContaController

@RequestMapping("/adicionaConta")
    public String adiciona(@Valid Conta conta) {
        System.out.println("Conta adicionada é:" + conta.getDescricao());
        ContaDAO dao = new ContaDAO();
        dao.adiciona(conta);
        return "redirect:conta/formulario";

    }
7 respostas

Eduardo, posta a classe toda aqui por favor ??

Boa noite Guilherme Romão. Segue a minha classe ContaController.java

package br.com.caelum.contas.controller;

import java.util.List;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import br.com.caelum.contas.dao.ContaDAO;
import br.com.caelum.contas.modelo.Conta;


@Controller
public class ContaController {

    @RequestMapping("/form")
    public String formulario() {
        return "conta/formulario";
    }

    @RequestMapping("/adicionaConta")
    public String adiciona(Conta conta) {

        if(conta.getDescricao().equals("") || conta.getDescricao() == null) {
            return "conta/formulario";
        }

        System.out.println("Conta adicionada é:" + conta.getDescricao());
        ContaDAO dao = new ContaDAO();
        dao.adiciona(conta);
        return "redirect:conta/formulario";

    }

    @RequestMapping("/listaContas")
    public ModelAndView lista() {
        ContaDAO dao = new ContaDAO();
        List<Conta> contas = dao.lista();
        ModelAndView mv = new ModelAndView("conta/lista");
        mv.addObject("contas", contas);

        return mv;

    }

    @RequestMapping("/removeConta")
    public String remove(Conta conta) {
        ContaDAO dao = new ContaDAO();
        dao.remove(conta);
        return "redirect:listaContas";
    }

    @RequestMapping("/mostraConta")
    public String mostra(Long id, Model model) {
        ContaDAO dao = new ContaDAO();
        model.addAttribute("conta",dao.buscaPorId(id));
        return "conta/mostra";

    }

    @RequestMapping("/alteraConta")
    public String altera(Conta conta) {
        ContaDAO dao = new ContaDAO();
        dao.altera(conta);
        return "redirect:listaContas";
    }

}

Estranho que usei como referência a Action remove do mesmo Controller, que funciona perfeitamente, e é uma sugestão do Maurício para implementar.

olhe só, quando você faz o redirect, você faz uma requisição a outro método da controller. Mas quando queremos retornar uma view, a gente passa o diretório onde ela está.

Vejamos:

No seu método:

 @RequestMapping("/adicionaConta")
    public String adiciona(Conta conta) {
...

você tem o seguinto código que retorna uma view e por isso acessa a pasta conta e pega a view formulario:

if(conta.getDescricao().equals("") || conta.getDescricao() == null) {
            return "conta/formulario";
        }

Contudo, no ponto que faz o redirect, você está fazendo a mesma coisa:

dao.adiciona(conta);
return "redirect:conta/formulario";

Só que nesse caso, não deveria acionar uma view e sim o método da controller:

return "redirect: form";

ou

return "redirect:listaContas";

Não consegui identificar exatamente qual das duas você quer.

Se tiver dúvida do redirect, veja o que você fez nos métodos:

@RequestMapping("/removeConta")
    public String remove(Conta conta) {
        ContaDAO dao = new ContaDAO();
        dao.remove(conta);
        return "redirect:listaContas";
    }

ou

@RequestMapping("/alteraConta")
    public String altera(Conta conta) {
        ContaDAO dao = new ContaDAO();
        dao.altera(conta);
        return "redirect:listaContas";
    }

Bom dia pessoal.

Ontem fiz algumas alterações, e não notei que na minha Action adicionaConta, estava apontando para o mesmo lugar. @José Avani, quero que ao adicionar uma conta, seja redirecionado para a lista de contas. Já corrigi isso, na action adicionaConta conforme o código abaixo

@RequestMapping("/adicionaConta")
    public String adiciona(@Valid Conta conta, BindingResult result) {

        if(result.hasErrors()) {
            return "conta/formulario";
        }

        ContaDAO dao = new ContaDAO();
        dao.adiciona(conta);
        return "redirect:listaContas";

    }

Muito obrigado, vou testar e retorno.

Valew cumpadi...

Estamos ai para ajudar.

Grande abraço e ótimos códigos.

solução!

E aí eduardo? Deu certo?

Sim @José Avani, funcionou sim... Desculpe a demora para responder.

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