2017-02-21 10 views
-1

У меня есть объект сущности гибернации. Мне нужно обновить этот объект, поэтому я передал этот объект в форму. В форме я изменю некоторые значения, а остальные будут постоянными. И я не могу показать эти постоянные значения клиенту, поэтому они должны перейти на следующую страницу с помощью другого метода, кроме как разложить их экспликацию в форме html.Как получить значения modelAttribute, которые не находятся в форме, весной

Вот мой объект, полученный в контроллере и передаются к просмотру:

@GetMapping("/update") 
public String update(@RequestParam("dataId") int id, Model md){ 
    Doctor dr = doctorService.getById(id); 


    /*for example lets say this doctor object has following properties 
    dr.setId(3); 
    dr.setName("James"); 
    dr.setUserId(7); 
    */ 

    md.addAttribute("doctor", dr); 


    return "object-form"; 
} 

Вот моя форма в виде:

<form:form action="save" modelAttribute="doctor" method="post"> 

    <form:errors path="name"></form:errors> 
    <form:input path="name" placeholder="Doktor İsmi" class="form-control" /> 

    <form:hidden path="id" /> 
    <input type="submit" value="Save doc" /> 
</form:form> 

из формы, только имя и идентификатор значения однако, userId - null. Мне нужно получить этот userId без сообщения.

Вот мой контроллер пост-процесс, который я обрабатывать объект:

@PostMapping(value="/save") 
public String save(@Valid Doctor dr, BindingResult bindingResult){ 

    doctorValidator.validate(dr, bindingResult); 
    if (bindingResult.hasErrors()) { 
     return "object-form"; 
    } 
    else{ 
     doctorService.save(dr); 
     return "redirect:list"; 
    } 
} 

Я не знаю, как можно достичь этого г даже есть способ для этого. Я искал в Google, но я не нашел решения.

Спасибо много ,,

ответ

1

Вы можете получить предыдущий объект врача из БД и получить идентификатор пользователя оттуда, как показано ниже:

@PostMapping(value="/save") 
public String save(@Valid Doctor dr, BindingResult bindingResult){ 
    Doctor prevDr = doctorService.getById(dr.getId()); 
    dr.setUserId(prevDr.getUserId()); 
    doctorValidator.validate(dr, bindingResult); 
    if (bindingResult.hasErrors()) { 
     return "object-form"; 
    } 
    else{ 
     doctorService.save(dr); 
     return "redirect:list"; 
    } 
} 
+0

Это решает мою проблему, но я не уверен, если это хорошо практика. Вообще-то я пытаюсь выполнить базовую операцию обновления. Это стандартный способ сделать это? (Я начинающий спящий и весенний) –

+0

Если у вас нет дальнейшей работы с userId, хорошей практикой было бы создание класса модели для вашей формы. И при обновлении создайте объект объекта из этого объекта модели формы и сохраните его. Это обновит строки новыми значениями и сохранит другие (userId ins this case), которые не заданы из формы. Это сэкономит вам один дополнительный запрос в вашем db. – mhshimul

+0

Спасибо, это звучит лучше. Еще один момент: как передать объект view-model из метода show-update-form, чтобы сохранить метод класса контроллера для назначения его из объекта hiberanate? –

Смежные вопросы