2014-01-30 3 views
0

У меня есть контроллер Spring MVC, который посылает список к виду:Spring MVC возврата объекта из JSP

modelAndView.addObject("myList", List<foo>); 

На JSP, я итерацию по этому списку создает таблицу, где каждая строка представляет собой форму с submit, представляющий один экземпляр foo. Как я могу получить единственный экземпляр foo, представленный этой строкой, в следующий контроллер? Я попытался поместить его в тип ввода = «скрытый», но это не сработало.

ответ

0

JSP обрабатывается и визуализируется в HTML, что является просто текстом.

При отправке формы браузер берет значения полей <input> и сериализует их в определенном формате. С типичной application/x-www-form-urlencoded типа содержимым, следующего <input> элементов

<form action="/some/url" method="POST"> 
    <input name="someField" value"someValue" type="text" /> 
    <input name="someOtherField" value"someOtherValue" type="text" /> 
    <input name="submit" value"submit" type="submit" /> 
</form> 

Сериализованным формат будет выглядеть что-то вроде

someField=someValue&someOtherField=someOtherValue&submit=submit 

весны будет принимать этот String из тела запроса в качестве параметров запроса и попытаться восстановить ваш объект команды (например, foo) из его значений. Вышеуказанный запрос можно было сопоставить с классом, подобным

class Foo { 
    private String someField; 
    private String someOtherField; 

    public String getSomeField() { 
     return someField; 
    } 

    public void setSomeField(String someField) { 
     this.someField = someField; 
    } 

    public String getSomeOtherField() { 
     return someOtherField; 
    } 

    public void setSomeOtherField(String someOtherField) { 
     this.someOtherField = someOtherField; 
    } 
} 

Любые поля, которые он не может отобразить, он игнорирует.

+0

Итак, вы говорите, что каждая форма должна иметь скрытый ввод для всех свойств класса Foo ... а затем в контроллере, например: @RequestMapping (value = {"/ secondRequest"} , method = {org.springframework.web.bind.annotation.RequestMethod.POST}) public ModelAndView secondRequest (Foo foo, запрос HttpServletRequest) Правильно? – Greg

+0

@Greg Они не должны быть скрыты. Кроме того, хотя то, что у вас есть, эквивалентно, вы должны иметь '@ModelAttribute (" foo ") Foo foo' вместо просто' Foo foo'. –

+0

Ну, я не показываю все свойства для пользователя, поэтому некоторые из них должны быть скрыты ... но это кажется слишком сложным для того, что я хочу сделать. Есть ли лучший способ подойти к проблеме? – Greg

Смежные вопросы