Wpis z mikrobloga

#programowanie #mvc #spring
Cześć
Zapędziłem się w kozi róg i chyba czas na poradę kogoś z większym doświadczeniem. Mam kontroler który ma 3 endpointy. 1 (get) zwraca stronę główną z formularzem. 2 (post) na podstawie danych z formularza strzela do zewnętrznego serwisu i zwraca 1 rezultat jako page do widoku. 3 (get) służy do paginacji strony. Czyli przychodzą zapytania z wartością page i zwracam odpowiedni rezultat. W czym problem? W tym że pobierając dane z serwisu w endpoincie post nie mam do nich dostępu w endpoincie get paginacji. Muszę stosować zmienna globalna ze scope session by nie była nadpisywania przy jednoczesnej pracy kilku użytkowników. Nie podoba mi się te rozwiązanie a nie umiem już wymyślić nic innego. Jakie byłoby najlepsze podejście w tym wypadku?
SebixBezKaryny - #programowanie #mvc #spring
Cześć
Zapędziłem się w kozi róg i chyb...

źródło: comment_1605025408qABSswoQcPcgsUEKaOEjDu.jpg

Pobierz
  • 14
@thexDguy: no tak działa to teraz endpoint anotherrndpoint. Dla przykładu w endpoincie post pobieram 30 rekordów. Zwracam 1 do widoku i tworze paginacje. Paginacja odwołuje się do endpointu get gdzie gdy użytkownik kliknie 5 w paginacji to zwróci mu 5 element z 30. Do widoku jest zwracany zawsze 1 rezultat bo jest bardzo obszerny w informacje stąd paginacja. Jedyny problem ze musi to być w zmiennej globalnej trzymane
a nie możesz pobierać tylko tego rekordu/ów o jaki prosi klient w danym get? Bo tak to chyba zaczynasz przechowywać stan. Co jeśli trzeba będzie dodać edycję?
Jeśli te dane nie są duże, to widziałem też zwracanie wszystkich danych (wszystkich stron), a dzieleniem tego na strony zajmowała się już tylko przeglądarka u klienta.
@thexDguy: właśnie rekordów jest dużo. Pobieram dane które chce użytkownik. Zewnętrze API umożliwia pobranie do 30 obiektów na podstawie kilku parametrów.wiec daje użytkownikowi możliwość wypełnienia formularza potem pobieram dane no i faktycznie jak mówisz muszę przechowywać stan. Ogółem to pojawia się problem paginacji wielu obiektów zwróconych przez API. Jak to dobrze zrobić. Bo żeby nie pamiętać stanu to bym musiał zwrócić wszystko od razu. Jak mówiłem obiektów jest 30 każdy z
@thexDguy: @Bauzzer: dobra to inaczej. Jak zrobić paginacje, jednocześnie wysłać formularz, wysłać zapytanie do zewnętrznego serwisu na podstawie danych z formularza i to jeszcze w 1 endpoincie? Jaki numer strony? Jak w momencie wysyłania formularza strony jeszcze nie mamy bo dane z api nie dostały zaciągnięte.
@SebixBezKaryny: Robisz jednego GET-a wartości z formularza i numer strony = 1 dajesz jako query string. Po stronie serwera zwracasz daną stronę + ilość wszystkich stron lub rekordów. W kliencie wyświetlasz wyniki + kontrolki do zmiany strony.
@Bauzzer: @SebixBezKaryny: to taki najprymitywniejszy przykład, jak spring i np. angular na froncie to:
https://www.baeldung.com/pagination-with-a-spring-rest-api-and-an-angularjs-table
i tam dao zastępujesz sobie kodem odpytującym zewnętrzny serwis.

Jeśli chcesz zostać przy ściąganiu najpierw wszystkiego (czy tam 30) rekordów, to olej paginację serverside i zrób to w jakimś js na froncie, który sobie w jsonie pobierze te 30 elementów z twojego API i będzie je prezentował pojedynczo.
@SebixBezKaryny: tak, do js.
No i ty nie robisz de facto paginacji serwer side, bo ta polega na pobieraniu części danych (najczęściej z bazy) z całości o którą prosi klient. Ty i tak u siebie na serwerze trzymasz w pamięci całość danych klienta i tylko wysyłasz mu kawałeczki, jak zmienia strony.