#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) {
...
}