2017-11-10 7 views
0

私は医師による患者データベースの管理専用アプリケーションを作成しようとしています。リクエストメソッド。私はそれらを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

+0

を示すように、この作品、私はそれが重要だと思いませんか?ちょうどパターンを構成した – bartuomiei

答えて

0

これを試して働いています:

<a th:href="@{/user=__${loggedInPersonelID}__/patients}">My patients</a> 

here

+0

はうまくいきませんし、率直に言って私はなぜそうすべきではありません。私はページ間をジャンプする際にオブジェクト情報を保存することに問題があります – bartuomiei

+0

前処理式 '__ 'のせいで式が前処理され、ユーザー= 1234が文字列として' @ '式に渡されます。 – Antoniossss

関連する問題