2013-07-09 2 views
1

Я пытаюсь реализовать пароль сброса, и я получаю ошибки, но я не могу понять, что делаю неправильно.Play Framework 2 не может получить данные из формы

это класс для смены пароля:

public static class PasswordChange { 

    @MinLength(6) 
    @Required 
    public String password; 

    @MinLength(6) 
    @Required 
    public String repeatPasssword; 

    public String getPassword() { 
     return password; 
    } 

    public String getRepeatPasssword() { 
     return repeatPasssword; 
    } 

    public void setRepeatPasssword(String repeatPasssword) { 
     this.repeatPasssword = repeatPasssword; 
    } 

    public void setPassword(String password) { 
     this.password = password; 
    } 

    public String validate() { 
     if (password == null || !password.equals(repeatPasssword)) { 
      return Messages.get("auth.change_password.error.passwords_not_same"); 
     } 
     return null; 
    } 
} 

, который распространяется по классу для сброса пароля:

public static class PasswordReset extends Account.PasswordChange { 

    public String getToken() { 
     return token; 
    } 

    public void setToken(String token) { 
     this.token = token; 
    } 

    public String token; 

    public PasswordReset() {} 

    public PasswordReset(final String token) { 
     this.token = token; 
    } 

} 

Это моя форма:

@(resetForm: Form[controllers.Signup.PasswordReset]) 

@import helper._ 
@import helper.twitterBootstrap._ 

@main(Messages("auth.password.forgot.title")){ 

<p> 
@form(routes.Signup.doResetPassword()) { 
    @if(resetForm.hasGlobalErrors) { 
     <p class="error"> 
      <span class="label label-important">@resetForm.globalError.message</span> 
     </p> 
    } 

    @views.html.auth.account.signup._passwordPartial(resetForm) 

    <input type="hidden" name="token" id="token" value='@resetForm("token").value' /> 

    <input type="submit" value="@Messages("auth.change.password.cta")" class="btn btn-primary"> 
} 
</p> 

}{ } 

После submittion я получаю формы в контроллере:

final Form<PasswordReset> filledForm = PASSWORD_RESET_FORM.bindFromRequest(request()); 

PASSWORD_RESET_FORM это поле, объявленное в том же контроллере:

private static final Form<PasswordReset> PASSWORD_RESET_FORM = form(PasswordReset.class); 

И это результат:

Form(of=class controllers.Signup$PasswordReset, 
    data={token=e2d48b70-9d00-4b8f-a8e4-ee17089c4e22, 
    repeatPassword=1234567, password=1234567}, 
    value=None, 
    errors={repeatPasssword=[ValidationError(repeatPasssword,error.required,[])]}) 

Очевидно, filledForm.hasErrors() возвращает истину, и я не могу получить ничего (потому что значение по = None). Может ли кто-нибудь указать мне на мою ошибку?

UPD: @ views.html.auth.account.signup._passwordPartial (resetForm) является шаблоном для пароля и пароля подтверждения поля

@(f: Form[_]) 

@import helper._ 
@import helper.twitterBootstrap._ 

@inputPassword(
    f("password"), 
    '_label -> Messages("auth.password.placeholder") 
) 

@inputPassword(
    f("repeatPassword"), 
    '_label -> Messages("auth.password.repeat"), 
    '_showConstraints -> false, 
    '_error -> f.error("password") 
) 
+0

Что находится в '@ views.html.auth.account.signup._passwordPartial (resetForm)' этот вид? –

+0

Это шаблон для нового поля подтверждения пароля и пароля. Я обновил свой вопрос, чтобы увидеть источник. – MightySeal

+0

Можете ли вы отредактировать вопрос, чтобы сказать об этом. –

ответ

1

Вы должны решить, сколько с в пароле. Ваша форма использует два, в то время как ваш класс использует три.

+0

Большое спасибо, был настолько невнимателен! – MightySeal

Смежные вопросы