How to keep the same object between requests in Spring MVC?

Asked

Viewed 75 times

1

I want to add the items to the same object Request dynamically, but always instantiating a new Request.

@GetMapping("/novo")
public ModelAndView preSalvar(@ModelAttribute ("pedido") Pedido Pedido){
    List<Produto> produtos= produtoService.recuperar();
    List<Mesa> mesas= mesaService.recuperar();
    ModelAndView model= new ModelAndView("/pedido/add");
    Date date=new Date();
    SimpleDateFormat sdf=new SimpleDateFormat("dd/MM/yyyy HH:mm ");
    String data= sdf.format(date);
    model.addObject("mesas",mesas);
    model.addObject("produtos", produtos);
    model.addObject("data",data);
    return model;
}


@GetMapping("/{codigo}/additem")
public String add (@PathVariable long codigo,@ModelAttribute ItemPedido itemPedido, @ModelAttribute Pedido pedido, BindingResult bindingResult){
    Produto produto= produtoService.recuperarPorId(codigo);
    itemPedido.setProduto(produto);
    itemPedido.setQuantidade(1);
    itemPedido.setPrecoUnit(produto.getPreco());
    pedido.addItem(itemPedido);
    System.out.println(pedido.toString());
    System.out.println(itemPedido);
    return "pedido/add";
}
<form >
        <table class="table">
            <thead>
            <tr>
                <th>Nome</th>
                <th>Descrição</th>
                <th>Preço</th>
                <th>Quantidade</th>
            </tr>
            </thead>
            <tr th:each="produto : ${produtos}">
                <td >
                    <a th:text="${produto.nome}" >nome</a>
                </td>
                <td th:text="${produto.descricao}">descricao</td>
                <td th:text="${'R$ ' + produto.preco}">preco</td>
                <td><input class="form-control col-md-2" id="quantidade" type="number" value="1" min="1"/><a id="add" class="btn btn-sm btn-info" th:href="@{/pedidos/{codigo}/additem(codigo=${produto.codigo})}" >Add</a></td>


            </tr>
        </table>
    </form> 

1 answer

0

Every time you include an item in the order you call the inclusion service to update the order? This way your application will fall very much in performance. I suggest you control your list of items on the front end, basically add and delete items in the list and then a "check out" button or finalize order, then you create your order with the items. Example:

   @PostMapping
    public ResponseEntity<Void> insert(@Valid @RequestBody Pedido obj) {
        obj = pedidoService.insert(obj);
        URI uri = ServletUriComponentsBuilder.fromCurrentRequest()
                .path("/{id}").buildAndExpand(obj.getId()).toUri();
        return ResponseEntity.created(uri).build();
    }

   @Transactional
    public Pedido insert(Pedido obj) {
        obj.setId(null);
        obj.setInstante(new Date());
        obj.setCliente(clienteService.find(obj.getCliente().getId()));
        obj.getPagamento().setEstado(EstadoPagamento.PENDENTE);
        obj.getPagamento().setPedido(obj);
        if (obj.getPagamento() instanceof PagamentoComBoleto) {
            PagamentoComBoleto pagto = (PagamentoComBoleto) obj.getPagamento();
            boletoService.preencherPagamentoComBoleto(pagto, obj.getInstante());
        }
        obj = pedidoRepository.save(obj);
        pagamentoRepository.save(obj.getPagamento());
        for (ItemPedido ip : obj.getItens()) {
            ip.setDesconto(0.0);
            ip.setProduto(produtoService.find(ip.getProduto().getId()));
            ip.setPreco(ip.getProduto().getPreco());
            ip.setPedido(obj);
        }
        itemPedidoRepository.saveAll(obj.getItens());
        return obj;
    }

I hope it helped you.

  • Control the list of items with javascript? with jquery da to do this?

Browser other questions tagged

You are not signed in. Login or sign up in order to post.