Advertisement
Guest User

Untitled

a guest
Sep 15th, 2019
207
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.83 KB | None | 0 0
  1. package me.parzibyte.sistemaventasspringboot;
  2.  
  3. import org.springframework.beans.factory.annotation.Autowired;
  4. import org.springframework.stereotype.Controller;
  5. import org.springframework.ui.Model;
  6. import org.springframework.validation.BindingResult;
  7. import org.springframework.web.bind.annotation.*;
  8. import org.springframework.web.servlet.mvc.support.RedirectAttributes;
  9.  
  10. import javax.validation.Valid;
  11.  
  12. @Controller
  13. @RequestMapping(path = "/productos")
  14. public class ProductosController {
  15. @Autowired
  16. private ProductosRepository productosRepository;
  17.  
  18. @GetMapping(value = "/agregar")
  19. public String agregarProducto(Model model) {
  20. model.addAttribute("producto", new Producto());
  21. return "productos/agregar_producto";
  22. }
  23.  
  24. @GetMapping(value = "/mostrar")
  25. public String mostrarProductos(Model model) {
  26. model.addAttribute("productos", productosRepository.findAll());
  27. return "productos/ver_productos";
  28. }
  29.  
  30. @PostMapping(value = "/eliminar")
  31. public String eliminarProducto(@ModelAttribute Producto producto, RedirectAttributes redirectAttrs) {
  32. redirectAttrs
  33. .addFlashAttribute("mensaje", "Eliminado correctamente")
  34. .addFlashAttribute("clase", "warning");
  35. productosRepository.deleteById(producto.getId());
  36. return "redirect:/productos/mostrar";
  37. }
  38.  
  39. // Se colocó el parámetro ID para eso de los errores, ya sé el id se puede recuperar
  40. // a través del modelo, pero lo que yo quiero es que se vea la misma URL para regresar la vista con
  41. // los errores en lugar de hacer un redirect, ya que si hago un redirect, no se muestran los errores del formulario
  42. // y por eso regreso mejor la vista ;)
  43. @PostMapping(value = "/editar/{id}")
  44. public String actualizarProducto(@ModelAttribute @Valid Producto producto, BindingResult bindingResult, RedirectAttributes redirectAttrs) {
  45. if (bindingResult.hasErrors()) {
  46. if (producto.getId() != null) {
  47. return "productos/editar_producto";
  48. }
  49. return "redirect:/productos/mostrar";
  50. }
  51. Producto posibleProductoExistente = productosRepository.findFirstByCodigo(producto.getCodigo());
  52.  
  53. if (posibleProductoExistente != null && !posibleProductoExistente.getId().equals(producto.getId())) {
  54. redirectAttrs
  55. .addFlashAttribute("mensaje", "Ya existe un producto con ese código")
  56. .addFlashAttribute("clase", "warning");
  57. return "redirect:/productos/agregar";
  58. }
  59. productosRepository.save(producto);
  60. redirectAttrs
  61. .addFlashAttribute("mensaje", "Editado correctamente")
  62. .addFlashAttribute("clase", "success");
  63. return "redirect:/productos/mostrar";
  64. }
  65.  
  66. @GetMapping(value = "/editar/{id}")
  67. public String mostrarFormularioEditar(@PathVariable int id, Model model) {
  68. model.addAttribute("producto", productosRepository.findById(id).orElse(null));
  69. return "productos/editar_producto";
  70. }
  71.  
  72. @PostMapping(value = "/agregar")
  73. public String guardarProducto(@ModelAttribute @Valid Producto producto, BindingResult bindingResult, RedirectAttributes redirectAttrs) {
  74. if (bindingResult.hasErrors()) {
  75. return "productos/agregar_producto";
  76. }
  77. if (productosRepository.findFirstByCodigo(producto.getCodigo()) != null) {
  78. redirectAttrs
  79. .addFlashAttribute("mensaje", "Ya existe un producto con ese código")
  80. .addFlashAttribute("clase", "warning");
  81. return "redirect:/productos/agregar";
  82. }
  83. productosRepository.save(producto);
  84. redirectAttrs
  85. .addFlashAttribute("mensaje", "Agregado correctamente")
  86. .addFlashAttribute("clase", "success");
  87. return "redirect:/productos/agregar";
  88. }
  89. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement