Wiązanie listy w @ RequestParam
Przesyłam kilka parametrów z formularza w ten sposób:
myparam[0] : 'myValue1'
myparam[1] : 'myValue2'
myparam[2] : 'myValue3'
otherParam : 'otherValue'
anotherParam : 'anotherValue'
...
Wiem, że mogę uzyskać wszystkie paramy w metodzie kontrolera dodając parametr jak
public String controllerMethod(@RequestParam Map<String, String> params){
....
}
Chcę powiązać parametry myParam [] (nie te pozostałe) z listą lub tablicą (cokolwiek, co utrzymuje porządek w indeksie), więc próbowałem z taką składnią jak:
public String controllerMethod(@RequestParam(value="myParam") List<String> myParams){
....
}
I
public String controllerMethod(@RequestParam(value="myParam") String[] myParams){
....
}
Ale żaden z nich nie wiąże myparamów. Nawet gdy dodam wartość do mapy nie jest w stanie powiązać "params": {]}
public String controllerMethod(@RequestParam(value="myParam") Map<String, String> params){
....
}
Czy istnieje jakakolwiek składnia pozwalająca powiązać niektóre paramy z listą lub tablicą bez konieczności tworzenia obiektu jako @ ModelAttribute z atrybutem list?
Dzięki
6 answers
Tablice w @RequestParam
są używane do wiązania kilku parametrów o tej samej nazwie:
myparam=myValue1&myparam=myValue2&myparam=myValue3
Jeśli potrzebujesz bindować @ModelAttribute
- parametry indeksowane w stylu, myślę, że i tak potrzebujesz @ModelAttribute
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-04-11 17:25:15
Albo możesz to zrobić w ten sposób:
public String controllerMethod(@RequestParam(value="myParam[]") String[] myParams){
....
}
To działa na przykład dla formularzy takich jak:
<input type="checkbox" name="myParam[]" value="myVal1" />
<input type="checkbox" name="myParam[]" value="myVal2" />
To najprostsze rozwiązanie:)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-04-11 15:54:39
Uzupełniając to, co powiedział Donal Fellows, możesz użyć listy z @RequestParam
public String controllerMethod(@RequestParam(value="myParam") List<ObjectToParse> myParam){
....
}
Mam nadzieję, że to pomoże!Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-17 19:53:55
Jednym ze sposobów na osiągnięcie tego celu (w hakerski sposób) jest utworzenie klasy wrapper dla List
. Tak:
class ListWrapper {
List<String> myList;
// getters and setters
}
Wtedy podpis metody kontrolera będzie wyglądał następująco:
public String controllerMethod(ListWrapper wrapper) {
....
}
Nie ma potrzeby używania adnotacji @RequestParam
lub @ModelAttribute
Jeśli nazwa kolekcji, którą przekazujesz w żądaniu, pasuje do nazwy pola kolekcji klasy wrapper, w moim przykładzie parametry żądania powinny wyglądać tak:
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/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-25 13:31:07
Subskrybując to, co powiedział basil w komentarzu do samego pytania, Jeśli method = RequestMethod.GET
możesz użyć @RequestParam List<String> groupVal
.
Następnie wywołanie usługi z listą param jest tak proste jak:
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/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-05 12:31:26
Zmień wartość ukrytego pola za pomocą przełącznika checkbox jak poniżej...
HTML:
<input type='hidden' value='Unchecked' id="deleteAll" name='anyName'>
<input type="checkbox" onclick="toggle(this)"/> Delete All
Skrypt:
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/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-01 19:09:25