miércoles, abril 20, 2011

Botones de submit dinámicos con Struts2

En ocasiones he tenido la necesidad de poder tener más de un botón de submit en un mismo formulario, teniendo estos distintas acciones, claro está.
6
Esto se puede resolver estableciendo el atributo "method" del elemento s:submit con el nombre de un determinado método que se ejecutará en la clase action destino. Tal que así:


<form action="unaAccion">
<s:submit method="ver" value="Ver"/>
<s:submit method="cancelar" value="Cancelar"/>
</form>


Y luego, en la clase action, establecer los métodos ver y cancelar así:


public class UnaAccion {
public String ver() {
return Action.SUCCES;
}

public String cancelar() {
return Action.SUCCES;
}
}


Pero hay otras ocasiones en las que tenemos más métodos de los que, razonablemente, pordríamo mapear y, además podemos complicarlo con que cada médoto debería recibir un dato del submit pulsado.

Para eso podemos usar la creación de submit dinámicos, más o menos sería así:


<form action="borrarEntrada.action">
<s:iterate value="entradas">
<s:property value="titulo">
<input type="submit" name="borrar[<s:property value='id'>]" value="borrar"/>
<br/>
</s:iterate>
</form>


Luego, el valor del botón pulsado se pordría recoger en la clase action de la siguiente forma:


public class BorrarEntradaAction {

private final Map borrar = new HashMap ();

public String execute () {
super.execute ();

for (Iterator i = borrar.keySet ().iterator (); i.hasNext ();) {
String id = (String) i.next ();
System.out.println (id);
}
}

public final Map getBorrar () {
return borrar;
}
}


Evidentemente, en el for solamente tendremos un item cuyo valor será el id que hemos asignado en la JSP.

Espero que, por lo menos, os ahorre el tiempo que a mí me ha costado encontrarlo :)