Arhn - архитектура программирования

Spring Boot (MVC), сохраняющий информацию об объекте для передачи ее другим URL-адресам.

Я пытаюсь сделать свое приложение, предназначенное для управления базой данных пациентов врачами, и у меня есть некоторые проблемы с сохранением информации об объекте, который когда-то отправляется методом почтового запроса. Я хочу, чтобы их запомнили в 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;
}

Сообщение метода передает вошедшему в систему пользователю следующий 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";
    }
}

Вот мой метод get, который перехватывает представление для вошедшего в систему пользователя. 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;
}

Однако следующая страница больше не запоминает идентификатор пользователя. Я думал, что передав его в атрибут модели с таким же именем, как определено в @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. Я работаю с тимелеафом


  • Я думаю, это не имеет значения? Только что сделал узор 10.11.2017

Ответы:


1

попробуй это:

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

это работает, как показано здесь

10.11.2017
  • не работает, и, честно говоря, я не знаю, почему это должно быть. У меня проблемы с сохранением информации об объекте при переходе между страницами 10.11.2017
  • Это должно быть связано с выражением предварительной обработки __.. Оно должно предварительно обрабатывать выражение и передавать, например, user=1234 в виде строки в выражение @, 11.11.2017
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..