Я хочу знать, есть ли способ обновить существующий атрибут @ModelAttribute. Если возможно, без сохранения значений в сеансе
Допустим, у меня есть компонент:
class TravelDetails{
private String origin;
private String destination;
private String travelerName;
private String travelerAge;
// Getters & Seters
}
Вот мой контроллер:
@Controller
class TravelerController{
@RequestMapping(value="/searchDetails", method=RequestMethod.GET)
public ModelAndView getSearchDetails(@RequestParam("origin") String origin,
@RequestParam("destination") String destination,ModelMap modelMap){
TravelDetails travelDetails = new TravelDetails();
travelDetails.setOrigin(origin);
travelDetails.setDestination(destination);
modelMap.addAttribute("travelDetails",travelDetails);
return new ModelAndView("get_traveler_details");
}
@RequestMapping(value="/addTravelerDetails", method=RequestMethod.POST)
public ModelAndView addTravelerDetails(
@ModelAttribute("travelDetails") TravelDetails travelDetails,
ModelMap modelMap){
System.out.println(travelDetails.getOrigin);
System.out.println(travelDetails.getDestination);
System.out.println(travelDetails.getTravelerName);
System.out.println(travelDetails.getTravelerAge);
return new ModelAndView("get_traveler_details");
}
}
Форма сообщения, полученная во втором методе контроллера, содержит только имя и возраст путешественника, в то время как происхождение и пункт назначения должны быть получены из атрибута модели, установленного в первом контроллере.
Я не хочу явно устанавливать заданные скрытые поля в форме Post.
Предположим, мой HTML-код будет таким:
<form:form modelAttribute="travelDetails" action="/addTravelerDetails" method="POST">
<form:input type="text" path="travelerName"/>
<form:input type="text" path="travelerAge"/>
</form:form>
Примечание. Я пишу код в текстовой области StackOverflow, а не в какой-либо среде IDE, поэтому, если в коде есть некорректная орфографическая или синтаксическая ошибка, не обращайте внимания.
@ModelAttribute
и всегда отправляйте идентификатор и извлекайте его из базы данных. Что касается производительности, я предлагаю сохранить его в сеансе с использованием@SessionAttributes
(хотя на самом деле он не предназначен для передачи атрибутов между контроллерами, но может работать). Попадание в базу данных для каждого запроса на самом деле не масштабируется. - person M. Deinum   schedule 20.05.2016