7

我正在尝试将一段文本绑定到 scala 表单。到目前为止,我有以下代码:

val registerForm = Form[User](
mapping(
  "login" -> text,
  "password" -> text,
  "roles" -> seq(text)
) {
  (login, password, roles) => User(login = login, password = password, roles = roles)
} {
  user => Some((user.login, user.password, user.roles))
})

我的 HTML 表单选择是:

<select id="roles" name="roles"  multiple="multiple">
    <option value="ADMIN">Admin</option>
    <option value="TESTER">Tester</option>
</select>

登录名和密码绑定正确。我的问题是角色序列总是空的。

我已经检查了传递给控制器​​方法的请求对象,并且(如果选择)两个角色都在那里——它们只是没有正确绑定在表单对象中。

有任何想法吗?

编辑:

我还在 play-framework Google Group ( https://groups.google.com/forum/#!topic/play-framework/KcbiF9K3d8w ) 上发布了我的问题并在那里收到了答案。解决方案是给选择一个名称:“roles[]”而不是“roles”。

4

2 回答 2

4

弄清楚了。

解决方案是给选择一个名称:“roles[]”而不是“roles”。

于 2014-06-23T11:50:02.740 回答
0

Java Play 2.3.7将Play 绑定Formselect具有multiple属性的 a 示例:

<select name="bar[]" multiple>
      <option value="bar-1">Bar</option>
      <option value="bar-2">Bar Bar</option>
      <option value="bar-3">Bar Bar Bar</option>
</select>

有一个Form

public class FooForm {
    public List<String> bar;
}

Controller绑定:

FooForm fooForm = Form.form(FooForm.class).bindFromRequest().get();
Logger.info(fooForm.bar.get(0));
Logger.info(fooForm.bar.get(1));

我已经用数组(即String[])进行了测试,它似乎只适用于List<>.

希望这可以帮助。


注意: 奇怪的是,这只适用于Form类 ( FooForm) 与控制器在同一个包中,或在同一个类和static. 这似乎是一个错误。

如果您想使用不同的包(即controllers.forms),那么您需要在表单类中使用 getter 和 setter:

public class FooForm {
    private List<String> bar;

    public List<String> getBar() { return bar; }
    public void setBar(List<String> bar) { this.bar = bar; }
}
于 2015-01-22T11:37:39.180 回答