Select no thymeleaf

Para inclusão está ok.

Para alteração, como validar se o país atual é igual a algum da lista. Se sim selecionar e mostrar na tela.

<select id="pais" th:field="*{pais}">
<option value="">Selecione o país</option>
<option th:each="pais : ${paises}" th:value="${pais.id}" th:text="${pais.descricao}" selected="selected"></option>
</select>

Alguma ajuda neste tópico também ?

Provavelmente isso vai te ajudar, precisa trocar:

selected="selected"

por:

th:selected="(${pais.id} == *{paisEdicao.id})"

Onde o paisEdicao é o pais que deve estar selecionado.
Faz um teste ai.

@wolmirGarbin, obrigado pelo retorno.

Fiz assim e não funcionou:

<option th:each="pais : ${paises}" th:value="${pais.id}" th:selected="(${pais.id} == *{paisEdicao})" th:text="${pais.descricao}"></option>

Aonde paisEdicao, é o país que vem do banco de dados e é preenchido assim, no controller:

@RequestMapping(value = "/editar/{id}", method = RequestMethod.GET)
public ModelAndView editar(@PathVariable("id") Long id) {
    	logger.info("Editando um bairro");
    	BairroEntity bairroAtual = bairroServico.buscarPorId(id);
    	ModelAndView modelAndView = new ModelAndView("bairro/novoEditar");
    	modelAndView.addObject("bairro", bairroAtual);
    	modelAndView = novoAlterar(modelAndView);
    	modelAndView.addObject("paisEdicao", bairroAtual.getPais().getId());
    	return modelAndView;
}

Debugando o valor está preenchendo corretamente.

O que está errado ?

Opa, tenta mudar para:

th:selected="${pais.id == paisEdicao}"

ou assim:

th:selected="${pais.id eq paisEdicao}"

Fiz um teste rápido e criei um post que mostra uma forma de resolver:

Quaquer dúvida da um grito!

Não funcionou.

th:selected="${pais.id == paisEdicao}"

th:selected="${pais.id eq paisEdicao}"

no Html fiz isto: <label th.text="${paisEdicao}">, e não está imprimindo nada.

Provavelmente seu problema está no seu controller, o que faz o método?

Inclui mais itens para a view. Lista para preencher o select no html.

private ModelAndView novoAlterar(ModelAndView modelAndView) {
	List<PaisEntity> paises = paisServico.listar();
	List<EstadoEntity> estados = estadoServico.listar();
	List<MunicipioEntity> municipios = municipioServico.listar();
	modelAndView.addObject("paises", paises);
	modelAndView.addObject("estados", estados);
	modelAndView.addObject("municipios", municipios);
	return modelAndView;
}

Alguma idéia ?

O retorno para o HTML era o objeto.
Criei um DTO que recebe o LONG do objeto escolhido, isto é, o ID. Ai funcionou.

Boa tarde guilhermebhte poderia explicar melhor o que você construiu eu estou na mesma duvida poderia ajudar?

1 curtida

Este projeto passamos ele para Angular. Assim, não trabalhamos mais com ModelAndView.