Передача информации о чабреце в скрытую форму - PullRequest
0 голосов
/ 20 января 2019

Я пытаюсь передать информацию из списка чабрецов и пытаюсь добавить ее в базу данных. Я получаю данные из tmdb, и они будут меняться, поэтому я отображаю информацию, полученную в конечной точке "/ LatestMovies", эта информация не сохраняется в БД, и эфир должен быть. поэтому я пытаюсь добавить кнопку сохранения для клиента, чтобы добавить фильм в списке. (это просто, у него просто есть movieid и moviename) Показывать фильмы, перечисленные у меня нет проблем, и он работает нормально, но я получаю сообщение об ошибке, когда я добавляю скрытую форму. Текущий код у меня есть это:

<div class="container">   
<table class="table table-hover">
    <tr>
        <th>Id</th>
        <th>Name</th>
    </tr>
    <tr th:each="LatestMovies : ${latestMovies}">
        <td th:text="${LatestMovies.id}"></td>
        <td th:text="${LatestMovies.movieName}"></td>
        <td>
         <form action="#" th:action="@{/LatestMovies}" th:object="${addMovies}" method="post">
    <p><input type="hidden" th:field="*{id}" th:attr="value = ${LatestMovies.id}" /></p>
    <p><input type="hidden" th:field="*{movieName}" th:attr="value = ${LatestMovies.movieName}" /></p>
    <p><input type="submit" value="Submit" /></p>
</form>
</td>

    </tr>
</table>

@Controller
public class LatestMoviesController {

@Autowired
private LatestMoviesDao listOfMovies;

@Autowired
private savedMoviesDao movieRepo;


@GetMapping("/LatestMovies")
public String prueba(Model model) {

    TmdbMovies movies = new TmdbApi("22914f477aaa3e7f86c6f5434df8d1eb").getMovies();
    ResultsPage<MovieDb> movie = movies.getPopularMovies("en", 1);

    for(int i=0; i <= 19; i++){
        int movieId = movie.getResults().get(i).getId();
        String movieName = movie.getResults().get(i).toString();
        listOfMovies.save(new LatestMovies(movieId, movieName));
        }

    model.addAttribute("latestMovies", listOfMovies.findAll());


    return "index";

}

 @PostMapping("/LatestMovies")
    public String save(@ModelAttribute("addMovies") Model model, SavedMovies addMovies) {

     movieRepo.save(addMovies);

        return "index";
    }


}

Спасибо заранее

1 Ответ

0 голосов
/ 20 января 2019

Во-первых, давайте изменим вашу форму. Вам не нужно добавлять новый объект к нему, так как вы уже просматриваете их список. Таким образом, вы также избежите необходимости добавлять значение для каждого поля вручную, используя th:attr. Что мы собираемся сделать, это отправить необходимые параметры отдельно, а затем построить наш объект фильма с ними.

<div class="container">   
    <table class="table table-hover">
       <tr>
          <th>Id</th>
          <th>Name</th>
       </tr>
       <tr th:each="LatestMovies : ${latestMovies}">
          <td th:text="${LatestMovies.id}"></td>
          <td th:text="${LatestMovies.movieName}"></td>
          <td>
              <form th:action="@{/LatestMovies}" method="post">
                  <p><input type="hidden" th:value="${LatestMovies.id}" name="id"/></p>
                  <p><input type="hidden" th:value="${LatestMovies.movieName}" name="name"/></p>
                  <p><input type="submit" value="Submit"/></p>
              </form>
          </td>
       </tr>
    </table>
</div>

Теперь на вашем контроллере выполните следующие модификации.

@PostMapping("/LatestMovies")
public String save(@RequestParam("id") Integer id, @RequesParam("name") String name) {
    SavedMovies movie = new SavedMovies();
    movie.setId(id);
    movie.setName(name);
    movieRepo.save(movie);
    return "index";
}

Эти изменения должны помочь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...