【发布时间】:2015-05-28 18:47:48
【问题描述】:
我有两种方法:登录和注册,它们都使用包含用户名、电子邮件和密码的“用户”类。我将所有三个字段都设置为@Required。它适用于注册,因为所有三个字段都是必需的。这是一个问题:我只想使用用户名和密码登录,但是调用 bindFromRequest() 方法时会出错。除了删除电子邮件字段的@Required 注释或为登录和注册创建两个单独的“用户”类之外,还有其他方法吗?
【问题讨论】:
标签: playframework
我有两种方法:登录和注册,它们都使用包含用户名、电子邮件和密码的“用户”类。我将所有三个字段都设置为@Required。它适用于注册,因为所有三个字段都是必需的。这是一个问题:我只想使用用户名和密码登录,但是调用 bindFromRequest() 方法时会出错。除了删除电子邮件字段的@Required 注释或为登录和注册创建两个单独的“用户”类之外,还有其他方法吗?
【问题讨论】:
标签: playframework
正如您所提到的,一种方法是删除电子邮件字段的 @Required 注释。
第二种方法是为这两个操作创建一个单独的 User 类。
第三种方法是使用动态表单,如下所示:
public Result hello() {
DynamicForm requestData = Form.form().bindFromRequest();
String username = requestData.get("username");
String password = requestData.get("password");
// now do something with the data we got...
return ok("Hello " + username);
}
【讨论】:
Anton 指出了一个解决方案 - 手动 使用 DynamicForm 获取字段。
其次是创建像LoginForm这样的附加类,它只包含登录过程所需的字段和注释,然后像Form<LoginForm> ...那样使用它而不是Form<User> ...
第三个选项是创建自定义 Required 注释,它是上下文相关的,无论如何,最可能以前的(第二个)解决方案将更容易实现。
【讨论】: