【发布时间】:2018-04-23 23:29:17
【问题描述】:
我正在尝试做我的应用程序,该应用程序专门用于由医生管理患者数据库,并且在保存有关通过 post 请求方法发送的对象的信息方面存在一些问题。我希望它们在 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;
}
方法 post 将登录用户传递到下一个 URL /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";
}
}
这是我的获取登录用户视图的方法。 URL 在这里有效,因为模型是在以前的 post 方法中传递的。我有类似/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;
}
URL 中的结果: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。我正在使用百里香
【问题讨论】:
-
我认为这不重要吗?刚刚编了个图案
标签: spring-mvc session spring-boot