Как заполнить выпадающий список из базы данных и обновить страницу при ее выборе? - PullRequest
0 голосов
/ 02 апреля 2019

Я создаю веб-сайт, который будет чем-то вроде фиктивного Покедекса, и я пытаюсь получить его, чтобы была одна страница для Покемона, которая будет обновляться на основе выпадающего списка возможных Покемон, при нажатии на который будет обновляться страница с выбранным Покемоном.

Текущая проблема, с которой я сталкиваюсь, заключается в том, что, несмотря на наличие в базе данных нескольких покемонов, раскрывающийся список не появляется, что говорит о том, что он не подбирает правильные значения или что это так, но может правильно интерпретировать результаты.

HTML-код с раскрывающимся списком:

<section class="dropdown">
            <form action="/pokemon" method="post" th:object="${pokemon}">
                <select th:each="pokemon : ${pokemonList}">
                    <option th:value="${pokemon.dexNum}" th:text="${pokemon.name}"></option>
                </select>
            </form>
        </section>

Какой должен запрашивать этот метод при выборе, я не могу подтвердить, как это работает без раскрывающегося списка, поэтому он может быть ошибочным.

private EntityManager em = new EntityManager();

@PostMapping(value = "/pokemon")
    public Pokemon changeCurrentPokemon(int num) {
        pokemonService.setCurrentPokemon(em.find(Pokemon.class, num));
        return pokemonService.getCurrentPokemon();
    }

С переменными, доступными через:

@GetMapping(value = "/pokemon")
    public ModelAndView showPokemon() {

        return new ModelAndView("pokemon", "pokemon",
                pokemonService.getCurrentPokemon() != null
                        ? pokemonService.getCurrentPokemon()
                        : new Pokemon(1, "Bulbasaur", "Seed Pokemon", "/images/pokemon/1-Bulbasaur.png", "Grass", "Poison")
        );
    }

Класс pokemonService является реализацией pokemonService, показанной здесь:

package pokedex.services;

import org.springframework.stereotype.Service;
import pokedex.dao.PokemonRepository;
import pokedex.entities.Pokemon;

import java.util.List;

@Service
public class PokemonServiceImpl implements PokemonService {

    private PokemonRepository pokemonRepository;
    private Pokemon currentPokemon;

    public PokemonServiceImpl(PokemonRepository pokemonRepository) {
        this.pokemonRepository = pokemonRepository;
    }

    @Override
    public List<Pokemon> getPokemonList() {
        return pokemonRepository.findAll();
    }

    @Override
    public void addPokemon(Pokemon pokemon) {
        currentPokemon = pokemon;
        pokemonRepository.save(pokemon);
    }

    @Override
    public void setCurrentPokemon(Pokemon pokemon) {
        currentPokemon = pokemon;
    }

    @Override
    public Pokemon getCurrentPokemon() {
        return currentPokemon;
    }

    @Override
    public int getNumberOfPokemon() {
        return (int) pokemonRepository.count();
    }
}

Если у кого-нибудь есть какие-либо советы о том, как сделать формы, я был бы очень признателен за помощь, спасибо

1 Ответ

0 голосов
/ 02 апреля 2019

У вас есть переменная модели pokemon и переменная pokemon в th:each.Поменяй одного из них.Также pokemonList не установлено.Разве это не опечатка?

<section class="dropdown">
            <form action="/pokemon" method="post" th:object="${pokemon}">
                <select th:each="pokemon: ${pokemonList}">
                    <option th:value="${pokemon.dexNum}" th:text="${pokemon.name}"></option>
                </select>
            </form>
        </section>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...