Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Обработка данных из формы с помощью Spring MVC


Автор: m0zg 6.10.2011, 21:52
Как можно обрабатывать данные в форме с помощью спринговых тегов для форм <form: form /> и привязкой к modelAttribute моего бина, если в этом бине есть ссылки на другие? Т.е., например:

Код

public class User {
    ...
    private Phone phone;
   
    ... getter/setters;
}


В полях формы обращаюсь в полям бина так: 
Код

<form:form modelAttribute="user" ...>
    <form:input path="phone.number" />
...


На сервер данные уходят через JSON. Т.е. серриализуются с помощью jquery'вской либы и отправляются.  Ну в и в контроллере в параметрах метода @RequestBody("user") User user.

Вобщем, при сабмите вылетает эксепшн, ругается на поля такого типа phone.number. Это можно как-то поправить?

Автор: m0zg 6.10.2011, 22:28
Вот вырезка из эксепшена:

Код

org.codehaus.jackson.map.exc.UnrecognizedPropertyException: Unrecognized field "phone.number" (Class ru....), not marked as ignorable
 at [Source: org.apache.catalina.connector.CoyoteInputStream@1cafe92; line: 1, column: 287] (through reference chain: ru.....User["phone.number"])
    org.codehaus.jackson.map.exc.UnrecognizedPropertyException.from(UnrecognizedPropertyException.java:53)


Названия своих полей и классов поменял, т.к. нельзя smile

Автор: AlexeyVorotnikov 7.10.2011, 09:29
В классе User есть методы getPhone() и setPhone(...)?

Автор: Stolzen 7.10.2011, 11:52
Код
@RequestBody("user")


Попробуйте убрать это.

Автор: m0zg 7.10.2011, 12:34
Цитата(AlexeyVorotnikov @ 7.10.2011,  09:29)
В классе User есть методы getPhone() и setPhone(...)?

Да, конечно, все сеттеры и геттеры присутствуют. Данные уходят, если передать просто через POST. А вот c JSON'ом проблемы.

Автор: m0zg 7.10.2011, 12:50
Цитата(Stolzen @ 7.10.2011,  11:52)
Код
@RequestBody("user")


Попробуйте убрать это.

Попробовал. Теперь при сабмите ошибка не валится. Значения через JSON уходят нормально, как и раньше. Но в метод попадает объект с пустыми значениями. Т.е. из json'a они в энтити не пишутся.


UPD. Ошибся в первом комменте. Там @RequestBody, без ("user").

Автор: m0zg 7.10.2011, 14:08
Видимо, тут нужно помудрить с библиотекой Jackson, чтоб она понимала, что это обращение к вложенному классу. Не пойму только как решить эту проблему.

Автор: m0zg 7.10.2011, 14:57
Всё, проблема решена. http://blog.springsource.com/2010/01/25/ajax-simplifications-in-spring-3-0/#comment-172073 решение

Автор: Stolzen 7.10.2011, 17:08
Цитата(m0zg @  7.10.2011,  13:50 Найти цитируемый пост)
Значения через JSON уходят нормально, как и раньше

Сразу не заметил, что через json туда отправляются. Можно сериализовать объект на клиенте через jQuery.param(data) и отправлять на сервер. Если там будет подходящий POJO во входных параметрах, то эти значения в него занесутся.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)