Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Erro ao utilizar select com Thymeleaf

Olá!

Estou treinando Spring boot fazendo um "sistema de uma companhia aérea". Em um form de cadastro tenho o seguinte:

    <form action="salvarrota" method="post">
        <div class="form-group">
            <label for="aeronave_id">Aeronave</label>
            <br></br>
            <select id="aeronave_id" name="aeronave_id" th:field="${aeronaves}" class="form-control">
                <option value="">Selecione a Aeronave</option>
                <option th:each="aeronave : ${aeronaves}" th:value="${aeronave.id}" th:text="${aeronave.modelo} " selected="selected"></option>
            </select>     
        </div>      
        <button type="submit" class="btn btn-success">Cadastrar</button>
    </form>

Aparece certo o nome do campo, com todas as opções que passei via model attribute.

Porém, na hora do submit aparece o erro abaixo:

Whitelabel Error Page

This application has no explicit mapping for /error, so you are seeing this as a fallback.

Sun Dec 10 17:13:11 BRST 2017
There was an unexpected error (type=Bad Request, status=400).
Required Integer parameter 'aeronave_id' is not present

Ao inspecionar a página percebi que o campo name não tem valor, mesmo tendo atribuido. Veja o que obtive no inspecionar:

<select id="aeronave_id" name="" class="form-control">
                <option value="">Selecione a Aeronave</option>
                <option value="1">Modelo: 737 NG   Cap: 200 pessoas</option>
                <option value="2">Modelo: 737 MAX   Cap: 150 pessoas</option>
                <option value="3">Modelo: 777   Cap: 400 pessoas</option>
                <option value="4">Modelo: 737 MAX   Cap: 300 pessoas</option>
                <option value="5">Modelo: 787   Cap: 400 pessoas</option>
              <option value="6">Modelo: 747   Cap: 400 pessoas</option>
                <option value="7">Modelo: A320   Cap: 360 pessoas</option>
                <option value="8">Modelo: A330   Cap: 100 pessoas</option>
                <option value="9">Modelo: A380   Cap: 250 pessoas</option>
                <option value="10">Modelo: TU-114   Cap: 220 pessoas</option>
                <option value="11">Modelo: G-133   Cap: 66 pessoas</option>
                <option value="12">Modelo: G-155   Cap: 22 pessoas</option>
            </select>

No meu controller tenho:

@RequestParam("aeronave_id") Integer aeronave_id

Já virei o código de cabeça para baixo e nada... Se alguém puder ajudar eu agradeço!

3 respostas

Tentei mudar o @RequestParam:

@RequestParam(value ="aeronave_id", required=false) Integer aeronave_id

Daí o erro mudou:

Error during execution of processor 'org.thymeleaf.spring4.processor.attr.SpringSelectFieldAttrProcessor'

Opa Gustavo, não manjo do thymeleaf. Pelo que vi você precisa ter um objeto no request que tenha uma propriedade associada ao name do select que você ta colocando ali... Existe esse objeto adicionado no model? Olhei essa dúvida aqui => https://github.com/thymeleaf/thymeleaf/issues/342

solução!

Gustavo,

Para você usar um form juntamente com um campo do tipo select você precisa "linkar" o campo ao formulário. No seu exemplo ficaria dessa forma:

        <form id="IdDoMeuForm" action="salvarrota" method="post">
            <div class="form-group">
                <label for="aeronave_id">Aeronave</label>
                <br></br>
                <select form="IdDoMeuForm" id="aeronave_id" name="aeronave_id" th:field="${aeronaves}" class="form-control">
                    <option value="">Selecione a Aeronave</option>
                    <option th:each="aeronave : ${aeronaves}" th:value="${aeronave.id}" th:text="${aeronave.modelo} " selected="selected"></option>
                </select>     
            </div>      
            <button type="submit" class="btn btn-success">Cadastrar</button>
        </form>

Espero que isso te ajude!