Fala galera boa, continuo aqui com meu pequeno sistema de loja. Estou idealizando uma pagina para cada tabela do banco, ao inves de varias paginas para cada funçao (cadastrar,alterar,remover,listar). O primeiro passo já foi dado que foi unir o cadastro com a listagem. Agora eu pergunto pra vocês, como poderia colocar a alteraçao na mesma pagina do cadastro? Atualmente tenho duas páginas separadas o formulario para o cadastro, e o edita para a alteração. A chamada para a alteração está na listagem que é chamada no formulário. Meu código a seguir:
ProdutosController
@Get("/produtos/novo")
public void formulario(){
this.result.include("produtoList",this.lista());
}
@Get("/produtos/{id}")
public Produto edita(Long id){
this.result.include("categorias",cdao.listaTudo());
return pdao.carregaProduto(id);
}
@Post("/produtos")
public void adiciona(Produto produto){
validator.validate(produto);
validator.onErrorUsePageOf(this).formulario();
pdao.salva(produto);
result.redirectTo(this).formulario();
}
@Put("/produtos/{produto.id}")
public void altera(Produto produto){
validator.validate(produto);
validator.onErrorUsePageOf(this).edita(produto.getId());
pdao.altera(produto);
result.redirectTo(this).lista();
}
Agradeço a ajuda desde já 
Isso é uma coisa que eu gosto muito de fazer. Assim a manutenção é bem mínima.
Primeiro passo: arrumar as actions (os formulários serão parecidos, certo?):
@Get("/produtos/novo")
public void form(){
this.result.include("produtoList",this.lista()); // Por que você adiciona essa lista aqui? Existe alguma combo, ou coisa parecida?
}
@Get("/produtos/{id}")
public void form(Long id){ // Mesmo nome... Assim ele abre a mesma jsp.
this.result.include("categorias",cdao.listaTudo()); // Por que essa lista aqui? Esse form não usa uma lista de produtos?
this.result.include("obj", pdao.carregaProduto(id)); // Lembra de colocar um input hidden com o id desse produto.
}
@Post("/produtos")
public void saveOrUpdate(Produto produto){ // Como o formulário é o mesmo, você manda os dois para cá.
validator.validate(produto);
validator.onErrorUsePageOf(this).formulario();
pdao.saveOrUpdate(produto); // Use o método saveOrUpdate do Hibernate, ele se vira para você...
result.redirectTo(this).formulario();
}
O ideal é você usar padrões independentemente do nome das classes: Chamar de obj, ou object, list ou objs ou objects. Assim, você pode aproveitar uma jsp para várias actions iguais.
Obrigado mais uma vez pela ajuda, Rafael. Vamos lá.
eu listo todos os produtos logo abaixo do formulario de cadastro. Isso é provisório, depois pretendo colocar em outra pagina.
aqui existia uma combobox para categoria, mas já retirei isso. Desculpe pelo código desatualizado.
Fiz tudo que você disse, e deu certo, mais uma vez obrigado 