簡體   English   中英

表單驗證播放框架2.0

[英]Form validation play framework 2.0

我正在關注http://www.playframework.org/documentation/2.0/JavaForms上的教程

我已經創建了一個類LoginForm.java(而不是示例中的User.class。不是用於持久化的類,只是一個表單值持有者)

package domain;

import static play.data.validation.Constraints.*;

public class LoginForm {

        @Required
        public String email;
        public String password;

}

在我的控制器中我做(作為示例),但我將值設置為空字符串以嘗試@Required注釋。

Form<LoginForm> loginForm = form(LoginForm.class);
Map<String,String> anyData = new HashMap();
anyData.put("email", "");
anyData.put("password", "");

//Faking a post
LoginForm postedLoginForm = loginForm.bind(anyData).get();

if(loginForm.hasErrors()) {
  //Just for this test task, should have another error handling..
  return ok("@Required annotation kicked in..");
} else {
  return ok("Got form values, email: " + postedLoginForm.email + " password: " + postedLoginForm.password);
}

但在:

LoginForm postedLoginForm = loginForm.bind(anyData).get();

我得到執行異常[[IllegalStateException:No value]]

所以它永遠不會檢查/來

if(loginForm.hasErrors()) 

有人知道為什么嗎? 如果我將值設置為示例:

Map<String,String> anyData = new HashMap();
anyData.put("email", "bob@gmail.com");
anyData.put("password", "secret");

一切正常,我使用正確的值檢索LoginForm對象。 我應該抓住異常嗎? 不應該玩,並設置loginForm.hasErrors = true?

謝謝你的幫助!

這是預期的行為。

請注意,必須在表單上使用.get()檢查錯誤。

LoginForm preLoginForm = loginForm.bind(anyData);

if(loginForm.hasErrors()) {
    //Just for this test task, should have another error handling..
    return ok("@Required annotation kicked in..");
}
LoginForm postedLoginForm = preLoginForm.get();
// ... Now use postedLoginForm 

這似乎是Play 2.0框架的一個錯誤。 我能夠在本地復制同樣的問題。

我打開了一張票https://play.lighthouseapp.com/projects/82401-play-20/tickets/313,以備你跟進。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM