@RequestMapping(value = "/roleform.html", method = RequestMethod.POST)
  public String guardarRole(
      @ModelAttribute("role") Role role,
      BindingResult result,
      SessionStatus status,
      HttpServletRequest request,
      Model model) {

    try {

      if (result.hasErrors()) {
        model.addAttribute("role", role);
        return "/admin/roleform";
      }

      roleManager.saveRole(role);
      updateRoleSecurity(role);
      saveMessage(request, getText("roleform.added", role.getName(), request.getLocale()));
      return "redirect:rolelist.html";

    } catch (Exception e) {

      if (role.getId() != null) {
        return "redirect:roleform.html?from=list&id=" + role.getId();
      }
      model.addAttribute("role", role);
      saveError(request, getText("errors.general", request.getLocale()));
      return "redirect:roleform.html";
    }
  }
  @RequestMapping(value = "/roleform.html", method = RequestMethod.GET)
  public @ModelAttribute("role") Role verRole(
      @RequestParam(value = "id", required = false) Long id, Model model) {

    Role role = new Role();
    if (id != null) {

      role = roleManager.getRole(id);

      List<OpcionMenu> opcionesMenu = opcionMenuService.obtenerOpcionesMenuPorRol(role.getId());
      role.setOpcionesMenu(opcionesMenu);

      List<OpcionMenu> opcionesMenuNoElegidas =
          opcionMenuService.obtenerOpcionesMenuNoEnRol(role.getId());
      role.getOpcionesMenu().addAll(opcionesMenuNoElegidas);

      boolean esRoleConDependencias = roleManager.esRoleConDependencias(id);
      if (esRoleConDependencias) {
        model.addAttribute(ES_EDITABLE, Boolean.FALSE);
      } else {
        model.addAttribute(ES_EDITABLE, Boolean.TRUE);
      }

      return role;
    }

    List<OpcionMenu> opcionesMenu = opcionMenuService.obtenerTodasOpcionesMenu();
    role.setOpcionesMenu(opcionesMenu);
    model.addAttribute(ES_EDITABLE, Boolean.TRUE);

    return role;
  }