Ainda não tem acesso? Estude com a gente! Matricule-se
Ainda não tem acesso? Estude com a gente! Matricule-se

Solucionado (ver solução)

Estou com dúvida no curso de Desenvolvendo aplicações Web com Spring MVC 3, no exercício 1 do capítulo Validação de dados.

Até o tópico anterior tudo estava funcionando, os dados estavam sendo inserido no sistema. Estou enviando a classe Conta, ContaController e a view formulario, após a inserção de annotations a view formulario chama a action adicionaConta e da erro 404, não econtra, mais pelo que vejo esta tudo direcionado corretamente como abaixo, o que pode ser? ''' package br.com.caelum.contas.modelo;

import java.util.Calendar;

import javax.validation.constraints.Size;

//import javax.validation.constraints.NotNull;

import org.hibernate.validator.constraints.NotEmpty; import org.springframework.format.annotation.DateTimeFormat;

public class Conta {

private Long id;

@NotEmpty(message= "{conta.descricao.vazia}") @Size(min = 5, message="{conta.formulario.descricao.tamanho}") private String descricao;

private boolean paga;

private double valor;

@DateTimeFormat(pattern = "dd/MM/yyyy") private Calendar dataPagamento;

private TipoDaConta tipo;

public Long getId() { return id; }

public void setId(Long id) { this.id = id; }

public String getDescricao() { return descricao; }

public void setDescricao(String descricao) { this.descricao = descricao; }

public boolean isPaga() { return paga; }

public void setPaga(boolean paga) { this.paga = paga; }

public Calendar getDataPagamento() { return dataPagamento; }

public void setDataPagamento(Calendar dataPagamento) { this.dataPagamento = dataPagamento; }

public TipoDaConta getTipo() { return tipo; }

public void setTipo(TipoDaConta tipo) { this.tipo = tipo; }

public double getValor() { return valor; }

public void setValor(double valor) { this.valor = valor; }

}

''' package br.com.caelum.contas.controller;

import java.util.List; import javax.validation.Valid; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.validation.BindingResult; 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(@Valid Conta conta, BindingResult result) {

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

System.out.println("Conta adiciona é: " + conta.getDescricao()); ContaDAO dao = new ContaDAO(); dao.adiciona(conta);

return "redirect:listaContas"; }

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

@RequestMapping("/alteraConta") public String altera(Conta conta) { ContaDAO dao = new ContaDAO(); dao.altera(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("/listaContas") public ModelAndView lista() { ContaDAO dao = new ContaDAO(); List contas = dao.lista(); ModelAndView mv = new ModelAndView("conta/lista"); mv.addObject("todasContas", contas); return mv; }

/ @RequestMapping("/listaContas") public String lista(Model mv) { //Outro exemplo de action lista ContaDAO dao = new ContaDAO(); List contas = dao.lista(); mv.addAttribute("todasContas", contas); return "conta/lista"; } */

}

''' conta.formulario.descricao.tamanho=Descrição deve conter no mínimo {min} caracteres. conta.descricao.vazia=Favor preencher os dados de descrição. '''

''' <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="http://www.springframework.org/tags/form" prefix="form" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

Adicionar Contas Descricao: Valor: Tipo: Entrada Saída

'''
2 respostas
solução

Opa Luis,

Seu código não formatou porque você tem que usar backticks e não aspas simples.

Pelo que consegui ver, o problema é seu retorno. Veja que no método formulario você retornou "conta/formulario".

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

Já no adiciona, você retorna apenas "formulario", fazendo com que o Spring não encontre a página.

@RequestMapping("/adicionaConta")
public String adiciona(@Valid Conta conta, BindingResult result) {
  if (result.hasErrors()) {
    return "formulario";
  }
...

Tente mudar o retorno do adiciona para "conta/formulario" e veja se isso resolve o problema.

Abraço.

Obrigado meu querido pela força matou na mosca, grande abraço fique com Deus!