Damian Sieradzki

Damian Sieradzki Java Developer

Temat: [Spring] Dostęp do beana w jsp.

Witam, pisze aplikacje w SpringMVC, do widoków używam Tiles'y. Mam pewien problem z wywołaniami metod warstwy Service bezpośrednio w widokach. Gdy ustawie scope w beanie na "request" wtedy w jsp mogę sobie odpalić np. takie coś w forEach i działa "${articlesService.getCategories()}" ale gdy bean ma domyslny scope czyli singleton wtedy nie pobiera danych. Nie mogę ustawić scope na request bo nie działa mi wtedy @Autowired w kontrolerach a gdy jest singleton działa wstrzykiwanie ale nie wywołania w jsp. Więc pytanie jest takie dlaczego nie działają wywołania metod beanów w jsp gdy scope jest singletonem?
Pozdrawiam.

konto usunięte

Temat: [Spring] Dostęp do beana w jsp.

W kontrolerze wrzuć do mapy przed wywołaniem widoku to, co chcesz pobrać z serwisu.
map.put("list", yourService.getAllItems());
W widoku nie wywołuj serwisu, tylko to, co wrzuciłeś do mapy. Piszę z pamięci, dawno nie rzeźbiłem w Springu MVC, ale w necie jest masa przykladów.
Damian Sieradzki

Damian Sieradzki Java Developer

Temat: [Spring] Dostęp do beana w jsp.

Właśnie tego chciałem uniknąć. Chce jak najmniej mieć w kontrolerze i jak najwięcej z automatu. Bo jaki sens w każdej akcji kontrolera ręczenie wciskać do widoku kto jest zalogowany jak sam widok może sobie pobrać kto jest. Stosuję metodykę DRY a takie coś mi nie leży, zwłaszcza że to co chce osiągnąć to działa ale tylko dla beanów scope="request" i chce się dowiedzieć dlaczego tylko dla tych.

konto usunięte

Temat: [Spring] Dostęp do beana w jsp.

map.put("list", yourService.getAllItems());


to jest DRY ?
Lepiej, żeby warstwa widoku nie wiedziała nic o logice systemu, takie jest założenie wzorca MVC, rozdzielenie tych warstw. To moim zdaniem nie ma nic wspólnego z DRY. Zauważ, że napisana wyżej przeze mnie metoda jest trywialna, w momencie gdy logika "trochę" się skomplikuje, na warstwie widoku będziesz mieć niemałe cuda w postaci parametrów funkcji, metod fabrykujących, utilsów i innych rzeczy, które powinieneś ukryć w tej warstwie.Andrzej Cichoń edytował(a) ten post dnia 03.02.13 o godzinie 19:59
Maciej Nowicki

Maciej Nowicki Java Developer

Temat: [Spring] Dostęp do beana w jsp.

Widok nie powinien nic pobierać, tylko wszystko dostać gotowe do wyświetlenia.

W widokach powinieneś odwoływać się TYLKO do modelu, nie do metod serwisowych beanów Springa. W przeciwnym razie to nie jest DRY tylko "YDIW" or "Your're Doing It Wrong".
Damian Sieradzki

Damian Sieradzki Java Developer

Temat: [Spring] Dostęp do beana w jsp.

Widocznie miałem złe podejście z powodu braku doświadczenia. Skoro taka zasadę się przyjmuję w oprogramowaniu klasy EE a jak widzę się takimi zajmujecie to przyjmuję wasze podejście. Mam pytanie ogólne. Czyli w każdej akcji kontrolera mam wpychać wszystkie informacje takie jak stopka, tytuł, i inne perdółki?
Michał Piotrowski

Michał Piotrowski Java Programmer

Temat: [Spring] Dostęp do beana w jsp.

Damian Sieradzki:
Widocznie miałem złe podejście z powodu braku doświadczenia. Skoro taka zasadę się przyjmuję w oprogramowaniu klasy EE a jak widzę się takimi zajmujecie to przyjmuję wasze podejście. Mam pytanie ogólne. Czyli w każdej akcji kontrolera mam wpychać wszystkie informacje takie jak stopka, tytuł, i inne perdółki?


Nie pamiętam przyznam szczerze jak to było w Tilesach, ale przecież tam 'layout' czy też inszy nadwidok powinien takie rzeczy ogarnąć. Jeśli potrzebujesz dynamicznego wkładania czegoś do layoutu (np: tytułu) to stwórz sobie abstrakcyjny kontroler po którym będą dziedziczyły twoje wszystkie kontrolery i tyle - w tym abstrakcie dorzucisz oczywiście metodę, która będzie wypełniała model (lub jego namiastkę) odpowiednimi danymi.

Co do używania samych beanów Springowych w JSP to się da (brzydkie i rozbudowane podejście, do tego dość stare) - http://javahome.wordpress.com/2008/04/25/springowe-bea...

konto usunięte

Temat: [Spring] Dostęp do beana w jsp.

.Ten post został edytowany przez Autora dnia 13.08.16 o godzinie 21:28
Maciej Nowicki

Maciej Nowicki Java Developer

Temat: [Spring] Dostęp do beana w jsp.

A screenname zalogowanego użytkownika najwygodniej pobrać z securityContext (bo zakładam, że skoro masz Springa, korzystasz też ze Spring Security), np.

http://stackoverflow.com/questions/9048995/get-spring-...
Damian Sieradzki

Damian Sieradzki Java Developer

Temat: [Spring] Dostęp do beana w jsp.

Rozwiązałem to inaczej, Napisałem sobie interfejs ViewProvider i klasę abstrakcyjna implementującą ten interface. Klasa która dziedziczy po abstrakcyjnej, aby implementuje jedna metodę "getViewData", która to wsadza wszystkie potrzebne rzeczy do hashMap. W kontrolerach daje autowired do view providera i to wszystko. Widoki wywojuje aby zamiast new ModelAndView("widok") to "ModelAndView view = viewProvider.getView("widok")" i dostaje go już wypełnionego z wszystkimi bajerami. Do tego mogę zrobić globalnego ViewProvider a potem dziedziczyć w innych miejscach aplikacji jeżeli design był by bardzo inny. Jak dla mnie poste jak cep w działa sprawnie. Jak bym miał klepać 10 linii w każdej akcji kontrolera to bym się pochlastał, bo sumarycznie wyszło by u mnie 600 linii bezużytecznego kodu a tak mam tylko 10 plus jedna klasę:)
Co o tym myślicie?



Wyślij zaproszenie do