Created
September 4, 2019 18:45
-
-
Save parzibyte/2077a7651349e9252d0dfd9a7fa05a6e to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package me.parzibyte.sistemaventasspringboot; | |
import org.springframework.beans.factory.annotation.Autowired; | |
import org.springframework.stereotype.Controller; | |
import org.springframework.ui.Model; | |
import org.springframework.validation.BindingResult; | |
import org.springframework.web.bind.annotation.*; | |
import org.springframework.web.servlet.mvc.support.RedirectAttributes; | |
import javax.validation.Valid; | |
@Controller | |
@RequestMapping(path = "/productos") | |
public class ProductosController { | |
@Autowired | |
private ProductosRepository productosRepository; | |
@GetMapping(value = "/agregar") | |
public String agregarProducto(Model model) { | |
model.addAttribute("producto", new Producto()); | |
return "productos/agregar_producto"; | |
} | |
@GetMapping(value = "/mostrar") | |
public String mostrarProductos(Model model) { | |
model.addAttribute("productos", productosRepository.findAll()); | |
return "productos/ver_productos"; | |
} | |
@PostMapping(value = "/eliminar") | |
public String eliminarProducto(@ModelAttribute Producto producto, RedirectAttributes redirectAttrs) { | |
redirectAttrs | |
.addFlashAttribute("mensaje", "Eliminado correctamente") | |
.addFlashAttribute("clase", "warning"); | |
productosRepository.deleteById(producto.getId()); | |
return "redirect:/productos/mostrar"; | |
} | |
// Se colocó el parámetro ID para eso de los errores, ya sé el id se puede recuperar | |
// a través del modelo, pero lo que yo quiero es que se vea la misma URL para regresar la vista con | |
// los errores en lugar de hacer un redirect, ya que si hago un redirect, no se muestran los errores del formulario | |
// y por eso regreso mejor la vista ;) | |
@PostMapping(value = "/editar/{id}") | |
public String actualizarProducto(@ModelAttribute @Valid Producto producto, BindingResult bindingResult, RedirectAttributes redirectAttrs) { | |
if (bindingResult.hasErrors()) { | |
if (producto.getId() != null) { | |
return "productos/editar_producto"; | |
} | |
return "redirect:/productos/mostrar"; | |
} | |
Producto posibleProductoExistente = productosRepository.findFirstByCodigo(producto.getCodigo()); | |
if (posibleProductoExistente != null && !posibleProductoExistente.getId().equals(producto.getId())) { | |
redirectAttrs | |
.addFlashAttribute("mensaje", "Ya existe un producto con ese código") | |
.addFlashAttribute("clase", "warning"); | |
return "redirect:/productos/agregar"; | |
} | |
productosRepository.save(producto); | |
redirectAttrs | |
.addFlashAttribute("mensaje", "Editado correctamente") | |
.addFlashAttribute("clase", "success"); | |
return "redirect:/productos/mostrar"; | |
} | |
@GetMapping(value = "/editar/{id}") | |
public String mostrarFormularioEditar(@PathVariable int id, Model model) { | |
model.addAttribute("producto", productosRepository.findById(id).orElse(null)); | |
return "productos/editar_producto"; | |
} | |
@PostMapping(value = "/agregar") | |
public String guardarProducto(@ModelAttribute @Valid Producto producto, BindingResult bindingResult, RedirectAttributes redirectAttrs) { | |
if (bindingResult.hasErrors()) { | |
return "productos/agregar_producto"; | |
} | |
if (productosRepository.findFirstByCodigo(producto.getCodigo()) != null) { | |
redirectAttrs | |
.addFlashAttribute("mensaje", "Ya existe un producto con ese código") | |
.addFlashAttribute("clase", "warning"); | |
return "redirect:/productos/agregar"; | |
} | |
productosRepository.save(producto); | |
redirectAttrs | |
.addFlashAttribute("mensaje", "Agregado correctamente") | |
.addFlashAttribute("clase", "success"); | |
return "redirect:/productos/agregar"; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment