[Resolvido] - VRaptor3, mais de uma action por formulário

Boas galera, tenho a seguinte dúvida.
Tenho um formulário com três actions, update, delete, cancelar(retorna para a lista principal) vejamos o formulário.

[code]<form action="<c:url value="/state/update" />" name=“editForm” method=“post”>

	<input type="hidden" name="state.id" value="${state.id}" />
	<label for="name">Nome:</label>
	<input type="text" id="name" name="state.name" value="${state.name}"/>
	<br>
	<label for="uf">UF: </label>
	<input type="text" id="uf" name="state.uf" value="${state.uf}" />
	<br>
	<input type="submit" value="Atualizar"/>
            <input type="submit" value="Deletar"/>
        <input type="submit" value="Cancelar"/>
[/code]

Como ficaria o controller nesse caso acima?

Outra duvida, eu não sei se é bug, mais se eu fizer uma action /state/edit/1 por exemplo, da erro 404, agora se eu fizer assim /state, e anotar o metodo edit com @Get, e @Path("/state/{state.id}"), assim funciona, caso contrário não.

Isso é um bug ou eu estou fazendo alguma coisa errada?

Olá davisnog

pra fazer isso coloque no seu controller:

@Resource
public class StateController {
    //...
    @Path("/state") @Get
    public void lista() {//lógica de listar}
    @Path("/state") @Put
    public void atualiza() {//logica de atualizar}
    @Path("/state") @Delete
    public void remove() {//lógica de remover}

}

repare que a URI é a mesma, só que você está mudando o método HTTP que a lógica aceita…

aí no seu form faça o seguinte:

<form action="<c:url value="/state" />" name="editForm" method="post">
		
		<input type="hidden" name="state.id" value="${state.id}" />
		<label for="name">Nome:</label>
		<input type="text" id="name" name="state.name" value="${state.name}"/>
		<br>
		<label for="uf">UF: </label>
		<input type="text" id="uf" name="state.uf" value="${state.uf}" />
		<br>
                <!-- o botão clicado vai definir o método http da requisição: -->
               <button type="submit" name="_method" value="PUT">Atualizar</button>
               <button type="submit" name="_method" value="DELETE">Deletar</button>
               <button type="submit" name="_method" value="GET">Cancelar</button>
</form>

pra passar parâmetros na URI você precisa usar o @Path, pq senão o vraptor não sabe onde colocar o parâmetro :wink:

então, o método StateController.edit(State state) por padrão aceita a URI /state/edit, sem parâmetros, mas se você
anotá-lo com @Path("/state/{state.id}") @Get, ele vai passar a aceitar requisições do tipo GET /state/42
e vai popular o parâmetro state.id com 42

Very good.
Tanks