Bind - Spring MVC

spring-mvc

#1

Olá, estou iniciando o livro Spring MVC, e construindo um projeto seguindo seus passos.

Porém, já no começo, na hora de chamar o método salvar, eu tenho erro quando meu método recebe parâmetro.

No meu caso ao invés de produto eu criei uma classe chamada Book.
Então minha controller está mais ou menos assim:
@Controller
public class BooksController{
@RequestMapping(/livros)
public String save(Book book){
[…]
}
}

O problema acontece quando o método save tem parâmetro, no caso o Book. Sem parâmetro entra nele, mas obviamente não faz nada.
O form e todas as configurações do spring estão iguais às do livro. E os inputs do form estão iguais aos do objeto.

Gostaria de saber se tem alguma outra configuração para fazer esse bind ou alguma dica do que eu poderia olhar.

Obrigado.


#2

Mostra a classe de controller completa e o form também. Acho que tenho uma ideia do que pode ser.


#3

oi tonyblack, meu código está assim:

package com.minhaestante.controller;

import javax.transaction.Transactional;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import com.minhaestante.model.Book;
import com.minhaestante.dao.BookDAO;

@Controller
@Transactional
@RequestMapping("/livros")
public class BookController {

@Autowired
BookDAO bookDAO;

@RequestMapping(method=RequestMethod.POST)
public String save(Book book) { //não consigo receber o livro por parâmetro
	//bookDAO.save(book);
	System.out.println("Cadastrando o livro");
	return "books/ok";
}

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

}

E meu form

<%@ page language=“java” contentType=“text/html; charset=ISO-8859-1”
pageEncoding=“ISO-8859-1”%>

Cadastro de Livro
Título
	<div>
		<label for="author">Autor</label>
		<input type="text" name="author" id="author"/>
	</div>
	
	<div>
		<label for="year">Ano</label>
		<input type="text" name="year" id="year"/>
	</div>
	
	<div>
		<label for="description">Descrição</label>
		<textarea rows="10" cols="20" name="description" id="description"></textarea>
	</div>
	
	<div>
		<label for="pages">Número de paginas</label>
		<input type="text" name="pages" id="pages"/>
	</div>
	
	<div>
		<label for="readYear">Ano em que Li</label>
		<input type="text" name="readYear" id="readYear"/>
	</div>
	
	<div>
		<label for="opinion">Minha Opinião</label>
		<textarea rows="10" cols="20" name="opinion" id="opinion"></textarea>
	</div>

	<div>
		<input type="submit" value="Cadastrar">
	</div>
</form>

#4

tonyblack,

testei novamente aqui e o problema eram os dados que eu estava passando.

quando passei a colocar valores numéricos nos campos que seriam datas, entrou no código como esperado.

Obrigado.