私は医師による患者データベースの管理専用アプリケーションを作成しようとしています。リクエストメソッド。私はそれらをURLに記憶しておきたい。私は@SessionAttributes
で何かをしようとしたが、私はそれをよく理解しているとは思わない。次のURL /user={id}
にログインしているユーザーオブジェクト情報を保存してURLに渡すためのSpring Boot(MVC)
@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;
}
メソッドのポストパス(使用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;
}
URLでの成果:user=$%7BloggedInPersonelID%7D/patients
とエラーThere was an unexpected error (type=Internal Server Error, status=500). No message available
はここだから私はそれをどのように行うか、目的のページへ
<a th:href="@{/user=${loggedInPersonelID}/patients}">My patients</a>
私を移動する必要がありますpersonel-main-view
ビュー内のリンクですか?厄介なコードをごめんね。この問題はそれよりも複雑ですか?もっと深いところがありますか?
PS。私はthymeleaf
を示すように、この作品、私はそれが重要だと思いませんか?ちょうどパターンを構成した – bartuomiei