我正在尝试使用专门用于管理医生的患者数据库的应用程序,并且在保留有关通过post request方法发送的对象的信息方面存在一些问题。我想让他们在URL中被记住。我尝试用@SessionAttributes
做一些事情,但我认为我不太了解它。
这是我的控制人员:
@Controller
@SessionAttributes("loggedInPersonelID")
@RequestMapping
public class PatientManagerController {
@Autowired
private PatientService patientService;
@Autowired
private PersonelService personelService;
private Personel getLoggedInPersonel(String personelID) {
return personelService.getPersonel(personelID);
}
@GetMapping
public ModelAndView getLoginView() {
ModelAndView mav = new ModelAndView("login-view");
mav.addObject("personel", new Personel());
return mav;
}
方法帖子将用户登录到下一个网址/user={id}
(使用RedirectAttributes)
@PostMapping
public String loginUser(@ModelAttribute("personel") Personel personel,
RedirectAttributes redirectAttrs,
Model model) {
Personel loggedInPersonel = getLoggedInPersonel(personel.getPersonelID());
model.addAttribute("loggedInPersonelID", loggedInPersonel.getPersonelID());
if (loggedInPersonel != null) {
if (loggedInPersonel.getPassword().equals(personel.getPassword())) {
redirectAttrs.addAttribute("id", loggedInPersonel.getPersonelID());
return "redirect:/user={id}";
} else {
model.addAttribute("errorMessage", "Invalid credentials!");
return "login-view";
}
} else {
model.addAttribute("errorMessage", "User with given ID does not exist");
return "login-view";
}
}
这是我的get方法,用于捕获登录用户的视图。由于模型是在之前的post方法中传递的,因此URL在这里工作。我有/user=john-smith-123
@GetMapping("/user={id}")
public ModelAndView getUserMainView(@PathVariable("id") String personelID) {
ModelAndView mav = new ModelAndView("personel-main-view");
Personel loggedInPersonel = getLoggedInPersonel(personelID);
mav.addObject("personelOccupation", loggedInPersonel.getOccupation());
mav.addObject("personelName", loggedInPersonel.getName());
mav.addObject("personelSurname", loggedInPersonel.getSurname());
return mav;
}
然而,下一页不再记住用户的ID。我认为将它传递给模型的属性,其名称与@SessionAttributes("loggedInPersonelID")
中确定的名称相同。
@GetMapping("/user={id}/patients")
public ModelAndView getPatientsView(@PathVariable("id") String personelID) {
ModelAndView mav = new ModelAndView("patients-view");
Personel loggedInPersonel = getLoggedInPersonel(personelID);
mav.addObject("loggedInPersonelID", loggedInPersonel.getPersonelID());
mav.addObject("list", patientService.getPersonelsList(loggedInPersonel));
return mav;
}
网址中的结果:user=$%7BloggedInPersonelID%7D/patients
和错误There was an unexpected error (type=Internal Server Error, status=500).
No message available
这是personel-main-view
视图中的链接,可以将我移至所需的页面
<a th:href="@{/user=${loggedInPersonelID}/patients}">My patients</a>
那我该怎么做?对不起凌乱的代码。这个问题比看起来更复杂吗?我有什么更深的东西吗?
PS。我正在和百里香一起工作
答案 0 :(得分:0)