Eu estou estudando spring-boot, thymelef e um pouco de ajax.
Eu tenho uma página onde eu busco por um paciente por auto-complete:
<form th:action="@{/consultas/salvar}" th:object="${consulta}" method="POST">
<div class="row">
<!-- Pesquisa paciente por nome -->
<div class=" form-group col-sm-6">
<div class="form-row">
<div class="form-group col-sm-10">
<label for="nome">Pesquisar por nome do Paciente</label>
<input class="form-control" id="autocomplete-input" th:field="*{paciente}"/>
</div>
</div>
Até aí tudo certo, estou conseguindo buscar o paciente pelo nome e setar no input, o problema vem depois. Eu quero que em vez de pegar o nome do paciente na hora da busca, pegar na hora de salvar.
Já que eu tenho um classe chamada StringToPacienteConverter que converte o ID de String para Long:
@Component
public class StringToPacienteConverter implements Converter<String, Paciente>{
@Autowired
private PacienteService service;
@Autowired
private PacienteRepository repositoy;
@Override
public Paciente convert(String text) {
if(text.isEmpty()) {
return null;
}
Long id = Long.valueOf(text);
return repositoy.findIdbyNome(id);
}
}
É possível eu pegar somente o ID do paciente? Como eu poderia fazer isso?
Classes extras PacienteRespository
:
public interface PacienteRepository extends JpaRepository<Paciente, Long>{
@Query("select p.id,p.nome,p.cpf from Paciente p where p.nome like %:nome%")
List<String> findPacientesByTermo(@Param("nome")String nome);
@Query("select p.id from Paciente p where p.nome like %:nome%")
Paciente findIdbyNome(@Param("nome") Long id);
}
ConsultaController:
@Controller
@RequestMapping("/consultas")
public class ConsultaController {
@Autowired
private PacienteRepository pacienteRepository;
@Autowired
private ConsultaService consultaService;
@GetMapping("/cadastrar")
public String cadastrar(Consulta consulta) {
return "/consulta/cadastro";
}
@PostMapping("/salvar")
public String salvar(Consulta consulta,RedirectAttributes attr) {
consultaService.salvar(consulta);
attr.addFlashAttribute("success", "Paciente agendado com sucesso");
return "redirect:/consultas/cadastrar";
}
@GetMapping("/listar")
public String listar(ModelMap model) {
model.addAttribute("consultas", consultaService.buscarTodos());
return "/consulta/lista";
}
@GetMapping("/calendario")
public String calendario() {
return "/consulta/calendario";
}
//auto complete do nome paciente para agendar
@GetMapping("/search")
public ResponseEntity<?> autocompleteByTermo(@RequestParam("termo") String termo){
List<String> pacientes = pacienteRepository.findPacientesByTermo(termo);
return ResponseEntity.ok(pacientes);
}
}