@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;
  }
  @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 = "/eliminarrole.html")
  public String eliminarRole(
      @RequestParam(value = "id", required = false) Long id,
      HttpServletRequest request,
      Model model) {

    try {

      roleManager.removeRole(id);
      saveMessage(request, getText("roleform.deleted", request.getLocale()));
      return "redirect:rolelist.html";

    } catch (Exception e) {
      saveError(request, getText("errors.general", request.getLocale()));
      return "redirect:roleform.html?from=list&id=" + id;
    }
  }
  @RequestMapping(value = "/rolelist.html")
  public void listarCategorias(Model model) {

    List<Role> roles = roleManager.getRoleList();
    model.addAttribute("roles", roles);
  }
  @RequestMapping(method = RequestMethod.POST)
  public String onSubmit(
      User user, BindingResult errors, HttpServletRequest request, HttpServletResponse response)
      throws Exception {
    if (request.getParameter("cancel") != null) {
      if (!StringUtils.equals(request.getParameter("from"), "list")) {
        return getCancelView();
      } else {
        return getSuccessView();
      }
    }

    if (validator != null) { // validator is null during testing
      validator.validate(user, errors);

      if (errors.hasErrors()
          && request.getParameter("delete") == null) { // don't validate when deleting
        return "/userform";
      }
    }

    log.debug("entering 'onSubmit' method...");

    Locale locale = request.getLocale();

    if (request.getParameter("delete") != null) {
      getUserManager().removeUser(user.getId().toString());
      saveMessage(request, getText("user.deleted", user.getFullName(), locale));
      return getSuccessView();
    } else {

      // only attempt to change roles if user is admin for other users,
      // showForm() method will handle populating
      if (request.isUserInRole(Constants.ADMIN_ROLE)) {
        String[] userRoles = request.getParameterValues("userRoles");

        if (userRoles != null) {
          user.getRoles().clear();
          for (String roleName : userRoles) {
            user.addRole(roleManager.getRole(roleName));
          }
        }
      }

      Integer originalVersion = user.getVersion();

      try {
        User userx = roleManager.getUserByUsername(user.getUsername());
        if (userx != null) {
          if (!userx.getPassword().equals(user.getPassword())) {
            user.setPassword(AeSimpleSHA1.SHA1(user.getPassword()));
          }
        } else {
          user.setPassword(AeSimpleSHA1.SHA1(user.getPassword()));
        }
        // user.setOriginalPassword(user.getOriginalPassword());//new
        // String pass = AeSimpleSHA1.SHA1(user.getOriginalPassword()); //new
        // user.setPassword(pass);//new
        getUserManager().saveUser(user);
      } catch (AccessDeniedException ade) {
        // thrown by UserSecurityAdvice configured in aop:advisor userManagerSecurity
        log.warn(ade.getMessage());
        response.sendError(HttpServletResponse.SC_FORBIDDEN);
        return null;
      } catch (UserExistsException e) {
        errors.rejectValue(
            "username",
            "errors.existing.user",
            new Object[] {user.getUsername(), user.getEmail()},
            "duplicate user");

        // reset the version # to what was passed in
        user.setVersion(originalVersion);

        return "/userform";
      }

      if (!StringUtils.equals(request.getParameter("from"), "list")) {
        saveMessage(request, getText("user.saved", user.getFullName(), locale));

        // return to main Menu
        return getCancelView();
      } else {
        if (StringUtils.isBlank(request.getParameter("version"))) {
          saveMessage(request, getText("user.added", user.getFullName(), locale));

          // Send an account information e-mail
          // Aun no podemos enviar correos :(
          //                    message.setSubject(getText("signup.email.subject", locale));

          //                    try {
          //                        sendUserMessage(user, getText("newuser.email.message",
          // user.getFullName(), locale),
          //                                        RequestUtil.getAppURL(request));
          //                    } catch (MailException me) {
          //                        saveError(request, me.getCause().getLocalizedMessage());
          //                    }

          return getSuccessView();
        } else {
          saveMessage(request, getText("user.updated.byAdmin", user.getFullName(), locale));
        }
      }
    }

    return getSuccessView();
  }