Pisanie kontrolerów - PKTI2/OPMS GitHub Wiki

Wstęp

Do MVC używany jest framework Spring MVC, jest on oparty na requestach, a bardziej dokładnie na mapowaniu requestu na widok i metody w kontrolerze.

Czo to je request

Protokół HTTP jest oparty na requestach, dwa najpopularniejsze z nich to GET i POST (GET ściąga, POST wysyła)

np. wpisując link

https://github.com/PKTI2/OPMS/wiki

wysyłamy request z metodą GET w którym prosimy serwer o wysłanie nam treści strony.

Parametry requestu

Requesty mogą mieć parametry np.

http://localhost:8080/test-definition/crud?pageNumber=1&size=15

Ten request kieruje na:

http://localhost:8080/test-definition/crud

Ale poza tym ma dwa parametry

pageNumber równy 1 i size równy 15

Mapowanie requestów na metody kontrolera

Metoda przykładowa:


@RequestMapping(value = "/test-definition/crud", method = RequestMethod.GET)
    public ModelAndView crud(@RequestParam(required = false, defaultValue = "0") Integer pageNumber,
                             @RequestParam(required = false, defaultValue = "15") Integer size) {
        pageable = new PageRequest(pageNumber, size);
        page = testDefinitionService.requestPage(predicate,pageable);
        ModelAndView modelView = new ModelAndView("/test-definition/crud/index");
        modelView.addObject("totalPages",page.getTotalPages());
        modelView.addObject("testDefinitions",page.getContent());
        modelView.addObject("pageable",pageable);
        modelView.addObject("searchBean",searchBean);
        return modelView;
    }

Zaczyna się ona adnotacją '@RequestMapping', widzimy że metoda mapowana jest na request '/test-definiton/crud' typu GET.

Dalej widzimy deklarację metody

public ModelAndView crud(@RequestParam(required = false, defaultValue = "0") Integer pageNumber,
                         @RequestParam(required = false, defaultValue = "15") Integer size)

Znaczy to że argumentami tej metody są parametry requestu, widzimy że można ustalać dla nich wartość domyślną.

Następną ciekawą linijką jest

ModelAndView modelView = new ModelAndView("/test-definition/crud/index");

Tworzymy tu obiekt ModelAndView i podajemy mu w konstruktorze adres widoku na który chcemy przekierować request. W tej sytuacji będzie to widok /resources/templates/test-definition/crud/index.html

Dalej

modelView.addObject("totalPages",page.getTotalPages());
modelView.addObject("testDefinitions",page.getContent());
modelView.addObject("pageable",pageable);
modelView.addObject("searchBean",searchBean);

Dodajemy tutaj obiekty do ModelAndView, dzięki temu będą dostępne one z poziomu pisanego przez naz widoku.

UWAGA

Bardziej czytelne może być użyte równoważnej adnotacji @ModelAttribute obiekty są tu dodawane do obiektu ModelAndView ręcznie z powodu problemu z odświeżaniem.

Przykładowe użycie @ModelAttribute

@ModelAttribute
public Integer totalPages() {
    return page.getTotalPages;
}

Jest to równoważne z:

modelView.addObject("totalPages",page.getTotalPages());

Na końcu zwracamy nasz obiekt.

Więcej: