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

Erro 404 ao tentar passar um multiplo select

Tenho este < select > que é preenchida com as opções corretamente

<!DOCTYPE html>
    <html xmlns:th="http://www.thymeleaf.org"
        xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
        xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity4"
        layout:decorate="~{layout}">
    <meta charset="utf-8">
    <div layout:fragment="content">
        <div class="ibox-title">
            <h2>Controle de pessoas</h2>
            <ol class="breadcrumb">
                <li><a th:href="@{/dashboard}">Página inicial</a></li>
                <li><a th:href="@{/pessoa}">Pesquisar pessoas</a></li>
                <li class="active"><strong><label
                        th:text="@{{tipoPagina}(tipoPagina=${tipoPagina})}"></label> tipo
                        de pessoa</strong></li>
            </ol>
        </div>
        <div class="ibox-title">
            <form class="form-horizontal" th:object="${pessoaTipoPessoa}"
                method="POST" id="codigoForm">
                <input type="hidden" id="id" th:field="*{id}" readOnly="readonly" />
                <input type="hidden" id="nomeFormulario" name="pessoaTipoPessoa"
                    readOnly="readonly" />

                <input type="hidden" 
                    id="pessoa" th:field="*{pessoa.id}" readOnly="readonly" />

                <div style="text-align: right;">
                    <button type="submit" class="btn btn-outline btn-info dim"
                        data-toggle="tooltip" data-placement="bottom" title="Salvar"
                        data-original-title="Salvar" id="salvar">
                        <i class="fa fa-save"></i>
                    </button>
                    <button type="reset" class="btn btn-outline btn-default dim"
                        id="limpar" th:if="${tipoPagina == 'Inserir'}">
                        <i class="fa fa-eraser"></i>
                    </button>
                    <a th:href="@{/pessoa}" data-toggle="tooltip"
                        data-placement="bottom" title="Voltar" data-original-title="Voltar">
                        <button type="button" class="btn btn-outline btn-warning dim">
                            <i class="fa fa-reply"></i>
                        </button>
                    </a>
                </div>
                <div class="ibox float-e-margins">
                    <div class="ibox-title">
                        <h5>Formulário</h5>
                    </div>
                    <div class="ibox-content">
                        <div class="row">
                            <div class="col-lg-12">
                                <div class="form-group">
                                    <label for="tipoPessoa">Tipos da pessoa <span
                                        class="text-danger">*</span>
                                    </label>
                                    <div data-toggle="tooltip" data-placement="bottom" title=""
                                        data-original-title="Selecione o tipo de pessoa !">
                                        <select
                                            class="select2_demo_2 form-control select2-hidden-accessible"
                                            multiple="multiple" tabindex="-1" aria-hidden="true"
                                            th:field="*{tiposPessoasEscolhidas}">
                                            <option th:each="tipo : ${tiposPessoas}" th:value="${tipo.id}"
                                                th:text="${tipo.descricao}"></option>
                                        </select>
                                    </div>
                                </div>
                            </div>
                        </div>
                    </div>
                </div>
            </form>
            <div th:include="todos/campos_obrigatorios" th:remove="tag"></div>
        </div>
    </div>
    </html>

Neste componente eu posso escolher mais de um valor, conforme imagem:

Ao clicar em salvar ele chama esta funcionalidade do jquery, mas sempre está dando erro 404, conforme imagem:

O que pode ser ?

Classe DTO, que recebe as informações:

 import org.hibernate.validator.constraints.NotEmpty;

    import br.com.netsoft.dto.NotaFiscalServicoDTO;
    import br.com.netsoft.enuns.PessoaTipoPessoaEnum;

    public class PessoaTipoPessoaDTO extends NotaFiscalServicoDTO {

        private static final long serialVersionUID = 2899990968494614321L;

        private PessoaDTO pessoa;
        private PessoaTipoPessoaEnum tipoPessoa;

        @NotEmpty
        private Integer[] tiposPessoasEscolhidas;

        public PessoaDTO getPessoa() {
            return pessoa;
        }

        public void setPessoa(PessoaDTO pessoa) {
            this.pessoa = pessoa;
        }

        public PessoaTipoPessoaEnum getTipoPessoa() {
            return tipoPessoa;
        }

        public void setTipoPessoa(PessoaTipoPessoaEnum tipoPessoa) {
            this.tipoPessoa = tipoPessoa;
        }

        public Integer[] getTiposPessoasEscolhidas() {
            return tiposPessoasEscolhidas;
        }

        public void setTiposPessoasEscolhidas(Integer[] tiposPessoasEscolhidas) {
            this.tiposPessoasEscolhidas = tiposPessoasEscolhidas;
        }
    }
4 respostas

Continuando.... Jquery que envia o metodo salvar, que funciona em outros formulários

 var request;
    $("#codigoForm").submit(function(event) {
        var endereco = "/nota-fiscal-servico-web-1.0.0/";
        var mensagem = '<h1><img src="' + endereco + 'resources/img/carregando.gif" /> Aguarde um momento...</h1>';
        $.blockUI({
            message : mensagem,
        });
        var formularioAtualizacao = endereco + "atualizacaoMonetaria/alterar/";
        var formularioTomador = endereco + "tomador/alterar/";
        var pessoaEndereco = "pessoaEndereco";
        var atualizacaoMonetariaItem = "atualizacaoMonetariaItem";
        var perguntaRespostaFrequente = "perguntaRespostaFrequente";
        var formularioPerguntaFrequente = endereco + "perguntaFrequente/alterar/";
        event.preventDefault();
        if (request) {
            request.abort();
        }
        var formulario = endereco + nomeFormulario.name;
        var $form = $(this);
        var $inputs = $form.find("input, select, button, textarea, file");
        var serializedData = $form.serialize();
        $inputs.prop("disable", true);
        request = $.ajax({
            url : formulario + "Recurso/salvar",
            type : "post",
            data : serializedData
        });
        request.done(function(response, textStatus, jqXHR) {
            console.log(jqXHR);
        });
        request.fail(function(jqXHR, textStatus, errorThrown) {
            //console.error("erro" + textStatus, errorThrown);
        });
        request.always(function(jqXHR) {
            $inputs.prop("disable", false);
            $.unblockUI(); // Desbloquear UI
            if(request.status == 200){
                if(request.responseText.indexOf("salvo") == -1){
                    toastr.error(request.responseText, "Error ...");
                } else {
                    toastr.info(jqXHR, "Sucesso ....");
                    $('#codigoForm').trigger("reset");
                    setTimeout(function() {
                        tipoProcesso = formulario.indexOf(atualizacaoMonetariaItem)
                        if (tipoProcesso > -1) {
                            formulario = formularioAtualizacao + $inputs[2].value;
                        } else {
                            pessoaEndereco = formulario.indexOf(pessoaEndereco)
                            if (pessoaEndereco > -1) {
                                formulario = formularioTomador + $inputs[2].value;
                            } else {
                                perguntaRespostaFrequente = formulario.indexOf(perguntaRespostaFrequente)
                                if (perguntaRespostaFrequente > -1) {
                                    formulario = formularioPerguntaFrequente + $inputs[1].value;
                                }
                            }
                        }
                        // aqui é o codigo que vai ser executado depois do tempo
                        // determinado no segundo parametro
                        window.location.assign(formulario);
                        // o tempo que vai levar ate a funcao ser executada, em
                        // milisegundos
                    }, 1000);
                }
            } else {
                toastr.error(request.status, "Error ...");
            }
        });
    });

Oi Guilherme,

Pode postar aqui o código do seu controller?

Se deu 404, pode ser que ele não achou um controller mapeando a url /nota-fiscal-servico-web-1.0.0/pessoaTipoPessoaRecurso/salvar ou não achou a página que é chamada após a lógica do controller ser executada.

Entendi. Mas entendo que o endereço do controller está correto...

 import javax.validation.Valid;

    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.validation.BindingResult;
    import org.springframework.web.bind.annotation.PostMapping;
    import org.springframework.web.bind.annotation.RestController;

    import br.com.netsoft.constantes.ConstantesNotaFiscal;
    import br.com.netsoft.dto.todos.PessoaTipoPessoaDTO;
    import br.com.netsoft.rest.NotaFiscalServicoRecurso;
    import br.com.netsoft.servico.todos.PessoaTipoPessoaServico;

    @RestController
    public class PessoaTipoPessoaRecurso extends NotaFiscalServicoRecurso {

        private static final long serialVersionUID = -4709281968529110863L;

        @Autowired
        private PessoaTipoPessoaServico pessoaTipoPessoaServico;

        @PostMapping(value = "/PessoaTipoPessoaRecurso/salvar")
        public String salvar(@Valid PessoaTipoPessoaDTO dto, BindingResult result) {
            try {
                if (result.hasErrors()) {
                    return salvar(result.getAllErrors());
                }
                pessoaTipoPessoaServico.salvar(dto);
            } catch (Exception e) {
                logger.error(e.getMessage());
                return mensagemErro(e);
            }
            return ConstantesNotaFiscal.MENSAGEM_SALVO_SUCESSO;
        }
    }
solução!

“pessoa” está em minusculo no javascript e no post do Java o P está maiusculo. Veja se isso faz diferença.

Resolvido