Spring boot - @ModelAttribute problem z nullPointerException

0

Mam problem ze znalezieniem koncepcji na rozwiązanie problemu.
Chodzi o to, że posiadam taką funkcję :

    @ModelAttribute("carModelSearch")
    public CarModelFilter getSimpleCarModelSearch(){
        return new CarModelFilter();
    }

Zwraca mi ona uchwyt do zmiennej sesyjnej która w przypadku mojego projektu zapisuje w sesji markę samochodu.

Posiadam również kontroler do zarządzania wersjami pojazdów np bmw seria3: e36,e46 etc.
Piszę obecnie panel admina i chciałbym aby admin mógł dodać nową wersję pojazdu pobierając z sesji markę i model (aby te dane były automatycznie wybrane po wczytaniu strony) o ile są zainicjalizowane (np w sytuacji gdy admin oglądał samochodu bmw z serii 3.
Problem leży po stronie modelu, gdyż aby móc użyć deklaracji funkcji :

    @ModelAttribute("loadModels")
    public List<CarModel> loadModels(@ModelAttribute("carModelSearch") CarModelFilter filter){
        return adminService.findAllModelsByBrand(filter);
    }

potrzebuję pobrać z sesji markę. I problem pojawia się w sytuacji gdy nie utworzyliśmy obiektu typu '@ModelAttribute("carModelSearch") CarModelFilter filter'. Jeśli wcześniej odwiedziłem podstronę z modelami wszystko działa, bo obiekt istnieje, nawet jeśli jest pusty.

Może istnieje jakaś adnotacja, aby ta zmienna była opcjonalna? Ale czy wtedy to potem doczyta zmiany?

2

Trochę nie rozumiem użycia sesji w tym przypadku, zwykle filtrowanie robi się za pomocą query params. Poza tym jest coś takiego jak @SessionAttributes - próbowałeś?

0

Korzystam z @SessionAttributes ale nad klasą, nie wiem czy o takie zastosowanie Ci chodzi. Potrzebuję mieć dostęp do wczytania listy modeli pojazdów dla zadanej marki, w moim przypadku. Pewnie mógłbym napisać jakieś zapytanie, reloadować stronę, lub mieć coś takiego jak tu zrobiłem.
Dodam, że doświadczonym programistą nie jestem :)
Co byś mi poradził, żeby zrealizować co potrzebne?

0

Zrobiłem, dzięki Charles.

    @ModelAttribute("loadModels")
    public List<CarModel> loadModels(HttpServletRequest request){

        if(request.getSession().getAttribute("carModelSearch")!=null){
            CarModelFilter c = (CarModelFilter)request.getSession().getAttribute("carModelSearch");
            return adminService.findAllModelsByBrand(c);
        }
        return null;
    }

To działa elegancko.

1 użytkowników online, w tym zalogowanych: 0, gości: 1