Добавление атрибута модели из метода json post

0

Я использую Spring MVC.

У меня есть запрос $.ajax POST для выполнения некоторых вычислений, и взамен я получаю объект Json.

Пока я делаю это, могу ли я добавить еще один атрибут модели, используя model.addattribute(x,y) из этого метода.

@RequestMapping(value = "/loadPOAction", method = RequestMethod.POST)
public @ResponseBody OrderSearch loadOrder(HttpServletRequest request, Model model,@RequestBody final  OrderSearch search) {

   System.out.println(search.getVal());

  model.addAttribute("name", "to be added to model");
  return search;
}

Возможно ли это? Я попытался, но не смог получить значение ${name} в JSP.

  • 0
    Ваш код не имеет большого смысла для меня. В соответствии с сигнатурой вашего метода он возвращает объект JsonOrder . Объект model которому вы добавляете свой атрибут, больше ни для чего не используется (должен ли он быть возвращен?). Затем вы возвращаете search который имеет тип OrderSearch . Можете ли вы очистить свой код или предоставить более подробную информацию о том, что именно вы хотите вернуть?
  • 0
    @JWK Извините ... я плохо .. Я убирался, чтобы код читался. Я изменил тип возврата как поиск заказа. Основная идея, которую я здесь ищу, заключается в том, можно ли добавить model.addattribute с помощью этого метода ... и как использовать это в JSP.
Показать ещё 1 комментарий
Теги:
spring
spring-mvc

1 ответ

0
Лучший ответ

Невозможно добавить какие-либо атрибуты JSP, которые вы ранее отображали. Этот JSP был обработан и возвращен клиенту и, таким образом, недоступен для контекста на стороне сервера.

Что касается повторного использования данных/объектов по нескольким запросам, вы, как правило, реализуете стратегию кэширования. Это не относится к сфере вашего вопроса, и я предлагаю прочитать здесь: http://docs.spring.io/spring/docs/4.0.0.RELEASE/spring-framework-reference/htmlsingle/#cache

Если вы хотите вернуть объект JSON, содержащий дополнительные атрибуты, вам нужно

  • либо добавлять значения непосредственно к объекту search (если у него есть необходимые поля)
  • или скопировать нужные поля в новый объект (может быть Карта или конкретный класс)

затем верните этот объект (соответственно подгоняя подпись вашего метода).

Например:

@RequestMapping(value = "/loadPOAction", method = RequestMethod.POST)
public @ResponseBody OrderSearch loadOrder(HttpServletRequest request, @RequestBody OrderSearch search) {

  // set on search object if possible
  search.setName("my name which I retrieved from somewhere");

  // alternatively, you could create a map with the values you need and return it
  // (requires you to change the method return type to Map
  Map<String, Object> resultMap = new HashMap<>();
  resultMap.put("name", "my name");
  resultMap.put("incomingSearch", search);
  resultMap.put("someSearchValue", search.getSomeValue());

  // alternatively, create a new "OrderSearchResponse" class and return an instance of it
  OrderSearchResponse searchResponse = new OrderSearchResponse();
  searchReponse.setName("my name");
  searchResponse.setSomeValue("some value");

  return search; // or resultMap or searchReponse depending on what you do above
}

Если вы хотите отобразить другой JSP, вы измените свой метод на следующий (обратите внимание на тип возврата String):

@RequestMapping(value = "/loadPOAction", method = RequestMethod.POST)
public @ResponseBody String loadOrder(HttpServletRequest request, Model model, @RequestBody final  OrderSearch search) {

  model.addAttribute("search", search);
  model.addAttribute("name", "to be added to model");

  return "theNameOfYourJspView";
}

Затем в вашем theNameOfYourJspView вы можете использовать ${search.someValue} а также ${name}.

  • 0
    На самом деле проблема в том, что страница уже отрисована, и нажата кнопка, передающая JS-объект OrderSearch. Он выбирает необходимые данные из базы данных и обогащается / заполняется значениями и, следовательно, возвращается. $ .ajax нуждается в возврате объекта Json на той же странице. Возвращение имени JSP не поможет.
  • 0
    Итак, тогда вы не используете JSP для возвращаемого объекта ... Я обновил свой ответ некоторыми опциями, которые у вас есть. По сути, вам просто нужно вернуть объект. Если вы можете обогатить объект OrderSearch , то это, вероятно, будет проще всего. В противном случае вам нужно будет перенести данные в другой объект, который вы затем вернете.
Показать ещё 6 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню