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: