luchob / softuni-spring-may-2024

Our common projects
15 stars 1 forks source link

Проблем при достъпване на данни от API. #79

Closed IliyanGeorgiev02 closed 3 months ago

IliyanGeorgiev02 commented 3 months ago

https://github.com/IliyanGeorgiev02/JavaWebFinalProject Здравейте, проекта ми представлява социална мрежа в която потребителите могат да споделят мненията си за различни филми и да създават списъци с филми по дадена тематика. За да достъпвам данни за филмите използвам OMDB API с който при въвеждане на дума в търсачката визуализира всички филми със съответната дума в зглавието си. За да се осъществи това използвам search метода в Omdb контролера и връща правилно данните за съответстващите филми в страницата ListOfMovies. Проблема идва когато се опитам да ги добавя в даден списък или да направя ревю, защото данните излизат като null в другите view-та. Данните за всеки филм в ListOfMovies се добавят в отделен form елемент с коректно поставени th:field стойности. Пробвах по различни начини да поставя th:field, th:value, id, name на елементите във формите като първо ги поставях директно на таговете, които визуализират информацията и после на скрити input полета. Също така проверих и dto-тата и те също са коректно създадени. Не знам на какво се дължи проблема и ще съм Ви много благодарен за съвет.

luchob commented 3 months ago

🎉Благодаря, че сте тук и се интересувате от Spring Framework!🎉

🌴 За съжаление обаче, аз не съм тук (това е автоматичен отговор) и ще бъда много ограничено достъпен чак до 10-ти август.
🥲Така че, не обещавам да ви отговоря или да ви пиша.
🥹Извинете ме!

:rocket: Успешно и приятно програмиране! :rocket:

luchob commented 3 months ago

Здравей, доколкото разбирам, проблемът/въпросът е че формите за AddReview за всеки един филм са празни. Нека проследим какво се случва преди попълването им и да разберем на какво се дължипроблема.

В контролера за сърч (@PostMapping("/search")) имаме добавяне на едно празно DTO:

session.setAttribute("movieData", new MovieFullInfoDto());

След това, в ListOfMovies добавяме празното DTO в модела.

        model.addAttribute("movieData", movieData);

За всеки един филм използваме едно и също празно DTO (movieData) за да попълним ревю формата:

                <form th:action="@{/AddReview}" th:object="${movieData}" th:method="post">
                    <input type="hidden" th:field="*{title}" th:value="${movie.title}"/>
                    <input type="hidden" th:field="*{year}" th:value="${movie.year}"/>
                    <button id="addReviewBtn" type="submit">Add review</button>
                </form>

Крайният резултат е една кажи речи една и съща празна форма :-)

<form action="/AddReview" method="post"><
    <input type="hidden" value="" id="title" name="title">
    <input type="hidden" value="" id="year" name="year">
    <button id="addReviewBtn" type="submit">Add review</button>
</form>

Опитай, например, нещо толкова просто като:

<form th:action="@{/AddReview}" th:method="post">
                    <input type="hidden" name="title" th:value="${movie.title}"/>
                    <input type="hidden" name="year" th:value="${movie.year}"/>
                    <button id="addReviewBtn" type="submit">Add review</button>
                </form>

И ще получиш пълна форма, която ще може да се submit-не. Нещо като:

<form action="/AddReview" method="post">
                    ...
                    <input type="hidden" name="title" value="Beta Test">
                    <input type="hidden" name="year" value="2016">
                    <button id="addReviewBtn" type="submit">Add review</button>
                </form>

Поздрави, Л.