Galera, estou tendo esse problema na minha aplicação e não estou sabendo como resolve-lo.
O problema é só na parte de edição do formulário. Quando peço para editar o spring me retorna isso
org.springframework.expression.spel.SpelEvaluationException: EL1008E: Property or field 'cidade' cannot be found on object of type 'java.util.Optional' - maybe not public or not valid?
Eu consigo cadastrar normalmente, vai tudo certinho pro banco e até consigo recuperar a cidade e uma tabela, porém não consigo jogá-la para o combo de cidades. Alguém tem alguma ideia de como resolver isso?
Meu controller tá assim
@RequestMapping(value = “/editar/{id}”)
public String editar(@PathVariable(value = “id”) Long id, Map<String, Object> model) {
Optional paciente = null;
if (id > 0) {
paciente = pacienteService.getOne(id);
System.out.println(paciente);
} else {
return " redirect:/listar";} model.put("paciente", paciente); model.put("titulo", "Cadastrar paciente"); return "paginas/form";}
Meu form assim.
<form class="form" method="post" th:action="@{/pacientes/salvar}" th:object="${paciente}"> <div class="form-body"> <div class="row"> </div> <div class="row"> <div class="col-md-4"> <div class="form-group"> <label for="nome">Nome<i class="fa fa-asterisk pink"></i></span></label> <div class="position-relative has-icon-left"> <input class="form-control" id="nome" name="nome" placeholder="Nome do paciente" th:field="*{nome}" type="text"> <div class="form-control-position"> <i class="ft-user"></i> </div> <p class="text-danger mt-1" th:errors="*{nome}" th:if="${#fields.hasErrors('nome')}"></p> </div> </div> </div> <div class="col-md-4"> <div class="form-group"> <label for="cpf">Cpf</label> <div class="position-relative has-icon-left"> <input class="form-control" id="cpf" name="cpf" placeholder="Cpf" th:field="*{cpf}" type="text"> <div class="form-control-position"> <i class="fa fa-id-card-o"></i> </div> <p class="text-danger mt-1" th:errors="*{cpf}" th:if="${#fields.hasErrors('cpf')}"></p> </div> </div> </div> </div> <div class="row"> <div class="col-md-4"> <div class="form-group"> <label for="cns">Rg<i class="fa fa-asterisk pink"></i></span> </label> <div class="position-relative has-icon-left"> <input class="form-control" id="rg" name="rg" placeholder="Rg" th:field="*{rg}" type="text"> <div class="form-control-position"> <i class="fa fa-id-card-o"></i> </div> <p class="text-danger mt-1" th:errors="*{rg}" th:if="${#fields.hasErrors('rg')}"></p> </div> </div> </div> <div class="col-md-4"> <div class="form-group"> <label for="orgaoEmissor">Orgão emissor<i class="fa fa-asterisk pink"></i></span></label> <div class="position-relative has-icon-left"> <input class="form-control" id="orgaoEmissor" name="orgaoEmissor" placeholder="Órgão emissor" th:field="*{orgaoEmissor}" type="text"> <div class="form-control-position"> <i class="fa fa-id-card-o"></i> </div> <p class="text-danger mt-1" th:errors="*{orgaoEmissor}" th:if="${#fields.hasErrors('orgaoEmissor')}"></p> </div> </div> </div> <div class="col-md-4"> <div class="form-group"> <label for="dataEmissao">Data de emissão<i class="fa fa-asterisk pink"></i></span></label> <div class="position-relative has-icon-left"> <input class="form-control" id="dataEmissao" name="dataEmissao" th:field="*{dataEmissao}" type="date"> <div class="form-control-position"> <i class="fa fa-calendar"></i> </div> </div> </div> </div> </div> <div class="row"> <div class="col-md-4"> <label for="estado">Estado<i class="fa fa-asterisk pink"></i></span> </label> <select class="form-control" id="estado" name="estado" th:field="*{estado}"> <option value="">Selecione um estado</option> <option th:each="estado:${listaEstado}" th:text="${estado.nome}" th:value="${estado.id}"> </option> </select> <p class="text-danger mt-1" th:errors="*{estado}" th:if="${#fields.hasErrors('estado')}"></p> </div> <div class="col-md-4"> <div class="form-group"> <input id="inputHiddenCidadeSelecionada" th:value="*{cidade != null} ? *{cidade.id} : 'cidade is null'" type="hidden"/> <label for="cidade">Cidade</label> <select class="form-control" data:url="@{/cidades}" id="cidade" name="cidade" th:field="*{cidade}"> </select> </div> <p class="text-danger mt-1" th:errors="*{cidade}" th:if="${#fields.hasErrors('cidade')}"></p> </div> <div class="col-md-4"> <div class="form-group"> <label for="bairroId">Bairro</label> <select class="select2 form-control" id="bairroId" name="bairroId" th:field="*{bairroId}"> <option th:each="bairro:${listaBairro}" th:text="${bairro.nome}" th:value="${bairro.id}"> </option> </select> </div> </div> </div> <div class="row"> <div class="col-md-4"> <div class="form-group"> <label for="logradouroId">Logradouro<i class="fa fa-asterisk pink"></i></span></label> <select class="select2 form-control" id="logradouroId" name="logradouroId" th:field="*{logradouroId}"> <option th:each="logradouro:${listaLogradouro}" th:text="${logradouro.nome}" th:value="${logradouro.getId()}"> </option> </select> </div> </div> <div class="col-md-4"> <div class="form-group"> <label for="nomePai">Endereço</label> <div class="position-relative has-icon-left"> <input class="form-control" id="endereco" name="endereco" placeholder="Endereço" th:field="*{endereco}" type="text"> <div class="form-control-position"> <i class="fa fa-map-marker"></i> </div> <p class="text-danger mt-1" th:errors="*{endereco}" th:if="${#fields.hasErrors('endereco')}"></p> </div> </div> </div> <div class="col-md-2"> <div class="form-group"> <label for="nomeMae">Número</label> <div class="position-relative has-icon-left"> <input class="form-control" id="numero" name="numero" placeholder="Número" th:field="*{numero}" type="text"> <div class="form-control-position"> <i class="fa fa-map-marker"></i> </div> <p class="text-danger mt-1" th:errors="*{numero}" th:if="${#fields.hasErrors('numero')}"></p> </div> </div> </div> <div class="col-md-2"> <div class="form-group"> <label for="nomeMae">Complemento</label> <div class="position-relative has-icon-left"> <input class="form-control" id="complemento" name="complemento" placeholder="Complemento" th:field="*{complemento}" type="text"> <div class="form-control-position"> <i class="fa fa-map-marker"></i> </div> <p class="text-danger mt-1" th:errors="*{complemento}" th:if="${#fields.hasErrors('complemento')}"></p> </div> </div> </div> </div> <div class="row"> <div class="col-md-6"> <div class="form-group"> <label for="nomePai">Pai</label> <div class="position-relative has-icon-left"> <input class="form-control" id="nomePai" name="nomePai" placeholder="Nome do pai" th:field="*{nomePai}" type="text"> <div class="form-control-position"> <i class="ft-user"></i> </div> <p class="text-danger mt-1" th:errors="*{nomePai}" th:if="${#fields.hasErrors('nomePai')}"></p> </div> </div> </div> <div class="col-md-6"> <div class="form-group"> <label for="nomeMae">Mãe</label> <div class="position-relative has-icon-left"> <input class="form-control" id="nomeMae" name="nomeMae" placeholder="Nome da mãe" th:field="*{nomeMae}" type="text"> <div class="form-control-position"> <i class="ft-user"></i> </div> <p class="text-danger mt-1" th:errors="*{nomeMae}" th:if="${#fields.hasErrors('nomeMae')}"></p> </div> </div> </div> </div> <div class="row"> <div class="col-md-4"> <div class="form-group"> <label for="telefone">Telefone</label> <div class="position-relative has-icon-left"> <input class="form-control" id="telefone" name="telefone" placeholder="Telefone" th:field="*{telefone}" type="text"> <div class="form-control-position"> <i class="fa fa-phone"></i> </div> <p class="text-danger mt-1" th:errors="*{telefone}" th:if="${#fields.hasErrors('telefone')}"></p> </div> </div> </div> <div class="col-md-4"> <div class="form-group"> <label for="celular">Celular</label> <div class="position-relative has-icon-left"> <input class="form-control" id="celular" name="celular" placeholder="Celular" th:field="*{celular}" type="text"> <div class="form-control-position"> <i class="fa fa-mobile"></i> <p class="text-danger mt-1" th:errors="*{celular}" th:if="${#fields.hasErrors('celular')}"></p> </div> </div> </div> </div> <div class="col-md-4"> <div class="form-group"> <label for="email">E-mail</label> <div class="position-relative has-icon-left"> <input class="form-control" id="email" name="email" placeholder="E-mail" th:field="*{email}" type="text"> <div class="form-control-position"> <i class="fa fa-envelope-o"></i> </div> <p class="text-danger mt-1" th:errors="*{email}" th:if="${#fields.hasErrors('email')}"></p> </div> </div> </div> </div> <div class="row"> <div class="col-md-12"> <div class="form-group"> <label for="procedimentos">Procedimentos</label> <select class="select2 form-control" data-placeholder="Pesquisar procedimentos" id="procedimentos" multiple="multiple" name="procedimentos" th:field="*{procedimentos}"> <option th:each="procedimento:${listaProcedimento}" th:text="${procedimento.descricao}" th:value="${procedimento.getId()}"> </option> </select> <p class="text-danger mt-1" th:errors="*{procedimentos}" th:if="${#fields.hasErrors('procedimentos')}"></p> </div> <input th:field="*{id}" type="hidden"> </div> </div> </div> <!-- FIM DO FORM BODY --> <div class="form-actions right"> <button class="btn btn-outline-red mr-1" type="reset"> <i class="ft-x"></i> Limpar </button> <button class="btn btn-outline-blue" type="submit"> <i class="fa fa-check-square-o"></i> Salvar </button> </div> </form>