Объекты, привязывающие неверный запрос в Spring Framework

#java #spring #jsp #spring-mvc #binding

#java #spring #jsp #spring-mvc #привязка

Вопрос:

Мы пытаемся выполнить трехуровневую привязку:

Дедушка -> (имеет много) Parent -> (имеет много) Дочерний

Наш дедушка и родители сохраняются в базе данных, после чего у них автоматически генерируются идентификаторы. Но в некоторых случаях наши дочерние объекты являются новыми и у них нет значений id.

Когда мы отправляем эту информацию с помощью ajax на наш сервер (Weblogic), мы выполняем привязку к данным с помощью:

 @RequestMapping(value = "/blablabla/update", method = RequestMethod.POST)
public String updateProducts(@ModelAttribute GrandFather grandpa, BindingResult result, Model model) {

...
}
  

В результате вы видите ошибку неверного запроса в своем браузере (с использованием Firebug). Мы видим только, что у дочернего элемента нет идентификаторов, остальные значения идеальны. Вы не видите ни одного на стороне сервера, выполняется любой код вашего метода.

Это не было бы проблемой, но это. Есть идеи о том, что происходит?

Спасибо.

Примечание. Мы используем Spring framework; Spring MVC; Сервер Weblogic и другие контроллеры и привязки работают.

Обновить:

Используемый HTML-код:

 <c:forEach items="${question.answers}" var="answer" varStatus="statusAnswer"> 
... 
<c:forEach items="${answer.ratings}" var="rating" varStatus="statusRating"> 
... 
<input type="hidden" name="questions[${statusQuestion.index}].id" value="${question.id}"/> 
<input type="hidden" name="questions[${statusQuestion.index}].respuestas[${statusQuestion.index}].ratings[${statusRating.index}].id" value="${valoracion.id}" /> 
... 
</c:forEach> 
... 
</c:forEach>
  

Как отправить, это сложно вставить сюда, имеет много javascript для заполнения некоторых значений объектов.

Комментарии:

1. Можете ли вы опубликовать html-код, который вы используете для вызова контроллера? Есть ли у вас какой-либо инициализатор с параметром @RequestParam в контроллере?

2. Я добавил HTML-код, который мы используем. И нет, мы не используем никакого InitBinder в нашем контроллере.

3. @jenaiz мы не видим HTML-код.

4. извините. Я не скопировал HTML-код 🙁 .

5. @jenaiz в следующий раз: ничего не экранируйте. выберите код и щелкните значок форматирования (тот, что с {})

Ответ №1:

Да, у меня есть решение этой проблемы. Если вы отправляете данные с помощью ajax, пожалуйста, не используйте атрибут model. Получите ваш параметр, используя объект запроса в контроллере.

напишите код, подобный этому

 @RequestMapping(value = "/blablabla/update", method = RequestMethod.POST)
public String updateProducts(HttpServletRequest request, Model model) {

...
}