VRaptor - Métodos anotado com @Path

Pessoal, estou com o seguinte problema:

De acordo com a apostila da Caelum, ao utilizar a Anotação @Path("/produtos/{id}’’) não é preciso de um para enviar o ID, pois o ID já é passado na URI. Ao usar essa URI com o método HTTP DELETE, dá ok. O problema é quando uso essa URI com o método HTTP PUT, a lógica é acionada porém o ID não é passado (null).

Segue a lógica do controller:

@Put @Path("/produtos/{id}")
	public void alterar(Produto produto) {
		System.out.println(produto.getDescricao());   //ok
		System.out.println(produto.getNome());        //ok
		System.out.println(produto.getPreco());        //ok
		System.out.println(produto.getId());             //null
		dao.atualiza(produto);
		result.redirectTo(this).listar();
	}

Segue a lógica do formulário de edição de um produto:

<form action="<c:url value="/produtos/${produto.id}"/>" method="POST">
		<fieldset>
			<legend>Editar Produto</legend>
			<label for="nome">Nome:</label>
			<input id="nome" type="text" name="produto.nome" value="${produto.nome}"/>
			<label for="descricao">Descrição: </label>
			<textarea id="descricao" name="produto.descricao">${produto.descricao}</textarea>
			<label for="preco">Preço:</label>
			<input id="preco" type="text" name="produto.preco" value="${produto.preco}"/>
			<button type="submit" name="_method" value="PUT"> Enviar </button>
		</fieldset>
</form>

vc colocou @Put @Path("/produtos/{id}"), mas recebeu no método um Produto produto.

o nome do parametro da URI tem que ser na mesma forma que o do form: produto.id.

@Put @Path("/produtos/{produto.id}")

[quote=Lucas Cavalcanti]vc colocou @Put @Path("/produtos/{id}"), mas recebeu no método um Produto produto.

o nome do parametro da URI tem que ser na mesma forma que o do form: produto.id.

@Put @Path("/produtos/{produto.id}") [/quote]

Aproveitando o tópico…

Queria saber como deveria ser a disposição das pastas do WebContent/WEB-INF/jsp caso eu queira fazer algo do tipo:

@Get
@Path("/protocolo/{protocolo.id}/testeprotocolo/{entity.id}/editar")
public void editar(Protocolo protocolo, TesteProtocolo entity) {

No caso eu tenho uma pasta chamada testeprotocolo com a pagina editar.jsp, esse código está no controlador TesteprotocoloController e tbm tenho um ProtocoloController…

o caminho do jsp não tem a ver com o @Path, e sim com o nome do controller e nome do método.

/WEB-INF/jsp/<nomeDoController>/<nomeDoMetodo>.jsp