1
試圖遷移這個Play 2.5 Java play-authenticate-usage項目到斯卡拉 play-authenticate-usage-scala我碰到了Forms declaration and handling的問題。在Java版本中,它們被定義(至少在該項目中)爲控制器類內的靜態類,例如Play 2.5 Scala定義表單的標準方法是什麼?
public class Account extends Controller {
public static class PasswordChange {
@MinLength(5)
@Required
public String password;
@MinLength(5)
@Required
public String repeatPassword;
public String validate() {
if (password == null || !password.equals(repeatPassword)) {
return Messages.get("playauthenticate.change_password.error.passwords_not_same");
} else {
return null;
}
}
// ...
}
// ...
private final Form<Account.PasswordChange> PASSWORD_CHANGE_FORM;
}
的PasswordChange
類然後從靜態觀點和其它類引用。我發現在Scala中複製的唯一方法是定義控制器帳戶伴隨對象,例如
/**
* Account companion object
*/
object Account {
case class PasswordChange(password: String, repeatPassword: String)
val PasswordChangeForm = Form(
mapping(
"password" -> text(minLength = 5),
"repeatPassword" -> text(minLength = 5)
)(PasswordChange.apply)(PasswordChange.unapply)
)
}
這是標準做法還是?有沒有更好的方法來做到這一點?對我來說,定義控制器伴侶對象感覺就像是一種黑客攻擊。
是的,沒有提及表格大小寫和映射類應該與封閉控制器相關的地方。 –
我喜歡在它引用的模型(case class)對象附近定義表單(在CRUD情況下) – pedrorijo91