На какой класс объектов будет преобразована сериализованная форма ajax в параметре действия контроллера Spring? - PullRequest
1 голос
/ 05 сентября 2010

Если форма HTML содержит несколько полей ввода:

 <form>
 <input id="in1" type="text" value="one">
 <input id="in2" type="text" value="two">
 <input id="in3" type="text" value="three">
 </form>

и передается контроллеру Spring в виде сериализованной формы следующим образом:

new Ajax.Request('/doajax', 
{asynchronous:true, evalScripts:true, 
parameters: $('ajax_form').serialize(true)});

какой тип Java необходим для чтения сериализованного ajax_form в контроллере Spring 3?

@RequestMapping("/doajax")
@ResponseBody
public String doAjax(@RequestParam <?Type> ajaxForm 
{
 // do something
}

1 Ответ

2 голосов
/ 05 сентября 2010

Прежде всего, вы используете поля формы без name s, поэтому serialize() фактически выдает пустой результат.Добавьте имена:

<form> 
 <input name = "in1" id="in1" type="text" value="one"> 
 <input name = "in2" id="in2" type="text" value="two"> 
 <input name = "in3" id="in3" type="text" value="three"> 
</form>

Я полагаю, вы используете Prototype, поэтому parameters: $('ajax_form').serialize(true) создает URL-кодированное представление формы (а также вам не нужно true здесь, оно добавляет ненужные преобразования).Поскольку @RequestParam не может связывать сложные типы, вы можете связывать поля как отдельные параметры:

public String doAjax(@RequestParam("in1") String in1, 
    @RequestParam("in2") String in2, @RequestParam("in2") String in2)

Также вы можете создать класс для хранения данных формы и передать его как атрибут модели:

public class AjaxForm {
    private String in1;
    private String in2;
    private String in3;

    ... getters, setters ...
}

-

public String doAjax(AjaxForm form)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...