Как получить значения modelAttribute, которые не находятся в форме, в Spring

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

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

@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>

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

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

@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 ответ

Решение

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

@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";
    }
}
Другие вопросы по тегам