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


Автор: 4epT 15.3.2012, 19:59
Добрый вечер всем! На странице есть большая форма для ввода данных, полей для ввода более 100 + кол-во может динамически менятся. При сабмите все данные уходят на сервер, там нужно все эти данные преобразовать в XML документ. Способ указанный ниже думаю отпадает, так как не красиво.

Код

String field1 = request.getParameter("field_1");
String field2 = request.getParameter("field_2");
String field3 = request.getParameter("field_3");
...


Как бы Вы это сделали ? Наиболее красиво и универсально.

Есть еще варианты написать класс, поля класса поментить аннотациями с указанием имени input и потом по Map пройтись и заполнить поля.

Может еще кто то подкинет идей ?)

Автор: Chort409 15.3.2012, 22:11
Можно пересылать все данные как один json объект, и на сервере преобразовать в класс и дальше делать с ним что хочешь.
Будет выглядить примерно так :
Код

 Gson gson = new GsonBuilder().create();
 instance_of_class = gson.fromJson(json_string, new TypeToken<class_name>(){}.getType());

Автор: 4epT 15.3.2012, 22:50
Цитата(Chort409 @ 15.3.2012,  22:11)
Можно пересылать все данные как один json объект, и на сервере преобразовать в класс и дальше делать с ним что хочешь.
Будет выглядить примерно так :
Код

 Gson gson = new GsonBuilder().create();
 instance_of_class = gson.fromJson(json_string, new TypeToken<class_name>(){}.getType());

Вы представляете формирование такого json на клиенте ? Там очень большой объем данных ...

Автор: jk1 16.3.2012, 08:35
Цитата

Как бы Вы это сделали ? Наиболее красиво и универсально.

Сделайте класс с полями, называющимися аналогично компонентам формы. После сабмита на сервере пройдитесь циклом по мапе параметров и установите при помощи reflection поля класса по названию. Таким образом код от количества полей зависеть не будет. Можно даже еще упростить код, использовав вместо громоздкого reflection BeanUtils из ApacheCommons.

То есть на сервере будет что-то в духе:

Код

 Container container = new Container();
 Map map = request.getParameterMap();
 for (Object key : map.keySet()){
      BeanUtils.setProperty(container, key.toString(), map.get(key));
  }


набросал второпях в качестве примера, надо конечно причесать слегка.
Дальше можно сбросить класс в XML при помощи JAXB.

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