Enlazar una lista en @RequestParam
Estoy enviando algunos parámetros desde un formulario de esta manera:
myparam[0] : 'myValue1'
myparam[1] : 'myValue2'
myparam[2] : 'myValue3'
otherParam : 'otherValue'
anotherParam : 'anotherValue'
...
Sé que puedo obtener todos los parámetros en el método controlador agregando un parámetro como
public String controllerMethod(@RequestParam Map<String, String> params){
....
}
Quiero enlazar los parámetros myParam [] (no los otros) a una lista o matriz (cualquier cosa que mantenga el orden del índice), así que he intentado con una sintaxis como:
public String controllerMethod(@RequestParam(value="myParam") List<String> myParams){
....
}
Y
public String controllerMethod(@RequestParam(value="myParam") String[] myParams){
....
}
Pero ninguno de ellos ata a los myParams. Incluso cuando agrego un valor al mapa no es capaz de enlazar el parámetros:
public String controllerMethod(@RequestParam(value="myParam") Map<String, String> params){
....
}
¿Existe alguna sintaxis para enlazar algunos parámetros a una lista o matriz sin tener que crear un objeto como @ModelAttribute con un atributo list?
Gracias
6 answers
Los arrays en @RequestParam
se utilizan para enlazar varios parámetros del mismo nombre:
myparam=myValue1&myparam=myValue2&myparam=myValue3
Si necesitas enlazar parámetros indexados de estilo @ModelAttribute
, supongo que necesitas @ModelAttribute
de todos modos.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-04-11 17:25:15
O simplemente podrías hacerlo de esa manera:
public String controllerMethod(@RequestParam(value="myParam[]") String[] myParams){
....
}
Que funciona por ejemplo para formas como esta:
<input type="checkbox" name="myParam[]" value="myVal1" />
<input type="checkbox" name="myParam[]" value="myVal2" />
Esta es la solución más simple:)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-04-11 15:54:39
Simplemente complementando lo que dijeron los Becarios Donales, puede usar la lista con @RequestParam
public String controllerMethod(@RequestParam(value="myParam") List<ObjectToParse> myParam){
....
}
Espero que ayude!
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-02-17 19:53:55
Una forma de lograr esto (de una manera hackish) es crear una clase wrapper para el List
. Así:
class ListWrapper {
List<String> myList;
// getters and setters
}
Entonces la firma del método controlador se vería así:
public String controllerMethod(ListWrapper wrapper) {
....
}
No es necesario usar la anotación @RequestParam
o @ModelAttribute
si el nombre de la colección que pasa en la solicitud coincide con el nombre del campo de la colección de la clase wrapper, en mi ejemplo, los parámetros de la solicitud deberían tener este aspecto:
myList[0] : 'myValue1'
myList[1] : 'myValue2'
myList[2] : 'myValue3'
otherParam : 'otherValue'
anotherParam : 'anotherValue'
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-25 13:31:07
Suscribiendo lo que basil dijo en un comentario a la pregunta en sí, si method = RequestMethod.GET
puede usar @RequestParam List<String> groupVal
.
Entonces llamar al servicio con la lista de parámetros es tan simple como:
API_URL?groupVal=kkk,ccc,mmm
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-09-05 12:31:26
Cambie el valor del campo oculto con la casilla de verificación como se muestra a continuación...
HTML:
<input type='hidden' value='Unchecked' id="deleteAll" name='anyName'>
<input type="checkbox" onclick="toggle(this)"/> Delete All
Script:
function toggle(obj) {`var $input = $(obj);
if ($input.prop('checked')) {
$('#deleteAll').attr( 'value','Checked');
} else {
$('#deleteAll').attr( 'value','Unchecked');
}
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-12-01 19:09:25