public ChangePasswordPanel() {
    txtOldPassword =
        new PasswordTextField("oldPassword", new PropertyModel<String>(this, "oldPassword"));
    txtOldPassword.setRequired(true);
    txtOldPassword.setLabel(Model.of("Parola veche"));
    addWithFeedback(txtOldPassword);

    txtNewPassword =
        new PasswordTextField("newPassword", new PropertyModel<String>(this, "newPassword"));
    txtNewPassword.setRequired(true);
    txtNewPassword.setLabel(Model.of("Parola noua"));
    txtNewPassword.add(StringValidator.minimumLength(6));
    addWithFeedback(txtNewPassword);

    txtRetypedPassword =
        new PasswordTextField(
            "retypedPassword", new PropertyModel<String>(this, "retypedPassword"));
    txtRetypedPassword.setRequired(true);
    txtRetypedPassword.setLabel(Model.of("Parola reintrodusa"));
    addWithFeedback(txtRetypedPassword);
  }
  public PasswordPage() {

    Usuario usuario =
        this.daoService.getUsuario(SecurityUtils.getSubject().getPrincipal().toString());

    final Form<Usuario> form =
        new Form<Usuario>("form", new CompoundPropertyModel<Usuario>(usuario));
    this.add(form);

    final FeedbackPanel feedBackPanel = new FeedbackPanel("feedBackPanel");
    feedBackPanel.setOutputMarkupId(true);
    form.add(feedBackPanel);

    Label nombreUsuario = new Label("nombreUsuario", usuario.getNombre());
    form.add(nombreUsuario);

    final PasswordTextField passActual =
        new PasswordTextField("contraseniaActual", new Model<String>(new String()));
    passActual.setLabel(Model.of("Password actual"));
    passActual.add(new StringValidator(0, 30));
    passActual.setRequired(true);
    passActual.add(
        new IValidator<String>() {

          @Override
          public void validate(IValidatable<String> validatable) {

            Boolean correcto =
                daoService.validarPassword(form.getModelObject(), validatable.getValue());

            if (!correcto) {
              error(validatable, "La password ingresada en 'Password actual' no es correcta.");
            }
          }

          private void error(IValidatable<String> validatable, String errorKey) {
            ValidationError error = new ValidationError();
            error.addKey(getClass().getSimpleName() + "." + errorKey);
            error.setMessage(errorKey);
            validatable.error(error);
          }
        });

    form.add(passActual);

    final PasswordTextField password = new PasswordTextField("password");
    password.setLabel(Model.of("Nueva Password"));
    password.add(new StringValidator(0, 30));
    password.setRequired(true);
    form.add(password);

    final PasswordTextField passConfirmacion =
        new PasswordTextField("contraseniaConfirmacion", new Model<String>(new String()));
    passConfirmacion.setLabel(Model.of("Confirmaci\363n"));
    passConfirmacion.setRequired(true);
    passConfirmacion.add(new StringValidator(0, 30));
    passConfirmacion.add(
        new IValidator<String>() {

          @Override
          public void validate(IValidatable<String> validatable) {

            if (!validatable.getValue().equals(password.getValue())) {
              error(
                  validatable,
                  "Las passwords ingresadas en 'Nueva Password' y 'Confimaci\363n' deben ser iguales.");
            }
          }

          private void error(IValidatable<String> validatable, String errorKey) {
            ValidationError error = new ValidationError();
            error.addKey(getClass().getSimpleName() + "." + errorKey);
            error.setMessage(errorKey);
            validatable.error(error);
          }
        });

    form.add(passConfirmacion);

    final SelectModalWindow selectModalWindow =
        new SelectModalWindow("modalWindow") {

          public void onCancel(AjaxRequestTarget target) {
            close(target);
          }
        };

    form.add(selectModalWindow);

    AjaxButton submit =
        new AjaxButton("submit", form) {

          @Override
          protected void onSubmit(AjaxRequestTarget target, Form<?> form) {

            Usuario usuario = (Usuario) form.getModelObject();

            String nuevaPassword = usuario.getPassword();

            Boolean estaHabilitado =
                PasswordPage.this.daoService.getPermisoCambiarPassword(usuario.getNombreLogin());

            if (estaHabilitado) {
              PasswordPage.this.daoService.setPassword(usuario.getNombreLogin(), nuevaPassword);
              selectModalWindow.show(target);

            } else {
              this.error("No tiene permiso para cambiar su password");
            }

            target.add(feedBackPanel);
          }

          @Override
          protected void onError(AjaxRequestTarget target, Form<?> form) {
            target.add(feedBackPanel);
          }
        };

    form.add(submit);
  }