Chamar um método do Controller do Spring via java script, é possivel?

1 resposta
java
R

Pessoal boa tarde! Estou desenvolvendo um sistema web utilizando Thymeleaf com Spring Boot e estou com um big problema para resolver. Dado um Select Option escolhido, preciso chamar um método do meu controller do spring para atualizar um segundo Select Option da página que estou. Pensei em utilizar um java script para chamar este metodo, porém não encontrei nenhuma referencia. Vocês podem me ajudar?

1 Resposta

T
//no controller
@PostMapping("/finalizar")
@ResponseStatus(value = HttpStatus.OK)
public @ResponseBody ResponseEntity<?> finalizar(@RequestBody List<ProdutoPrecoPendente> produtos,BindingResult result, @AuthenticationPrincipal User user) {
	validacaoPrecoService.finalizar(produtos, user);
	return ResponseEntity.ok().build();
}
//no javascript
function finalizarValidacaoPreco(produtos) {
	$.ajax({
		url : '/validacaoPreco/finalizar',
		method : 'POST',
		contentType : 'application/json',
		data : JSON.stringify(produtos),
		error : onErroFinalizaValidacao.bind(this),
		success : onValidacaoFinalizada.bind(this)
	});
}

um exemplo dentro do seu caso

var selectGrupo = $("#selectGrupo");
var secao = $("#selectSecao");
secao.on("change", listarPorSecao.bind(this));

function listarPorSecao(event) {
	var idSecao = event.target.value;
	if (idSecao != 0) {
		$.ajax({
			url : `/grupos/secao/${idSecao}`,
			method : 'GET',
			contentType : 'application/json',
			success : montarSelectGrupo.bind(this),
			error : onErroPesquisa.bind(this)
		});
	} else {
		montarSelectGrupo([]);
	}
}

function montarSelectGrupo(grupos) {
	selectGrupo.empty();
	selectGrupo.html('<option value="">Selecione um grupo</option>');
	grupos.forEach(function(grupo) {
		var optionGrupo = $('<option>').val(grupo.id).text(grupo.nome);
		selectGrupo.append(optionGrupo);
	});
}
@Controller
@RequestMapping("/grupos")
public class GrupoController {

	@Autowired
	private Grupos grupos;

	@ResponseStatus(code = HttpStatus.OK)
	@RequestMapping(value = "/secao/{idSecao}")
	@CrossOrigin
	public ResponseEntity<List<Categoria>> listarPorSecao(@PathVariable("idSecao") Long idSecao) {
		return ResponseEntity.ok().body(grupos.findBySecaoId(idSecao));
	}

}
<div class="form-group col-sm-2">
	<label for="selectSecao" class="control-label">Seção</label> 
	<select id="selectSecao" class="form-control">
		<option value="">Selecione uma seção</option>
		<option th:each="secao : ${secoes}" th:value="${secao.id}" th:text="${secao.nome}"></option>
	</select>
</div>
<div class="form-group col-sm-2">
	<label for="selectGrupo" class="control-label">Grupo</label> 
	<select id="selectGrupo" class="form-control">
		<option value="">Selecione um grupo</option>
		<option th:each="grupo : ${grupos}" th:value="${grupo.id}"	th:text="${grupo.nome}"></option>
	</select>
</div>
<div class="form-group col-sm-2">
	<label for="selectSubgrupo" class="control-label">Subgrupo</label> 
	<select id="selectSubgrupo" class="form-control">
		<option value="">Selecione um subgrupo</option>
		<option th:each="subgrupo : ${subgrupos}" th:value="${subgrupo.id}"  th:text="${subgrupo.nome}"></option>
	</select>
</div>
Criado 9 de maio de 2020
Ultima resposta 15 de mai. de 2020
Respostas 1
Participantes 2