形成seq(文本)绑定
我试图将一个seq文本绑定到一个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>
登录名和密码正确绑定。 我的问题是角色的seq总是空的。
我检查了传递给控制器方法的请求对象,并且(如果选中)两个角色都存在 - 它们只是没有正确绑定在表单对象中。
有任何想法吗?
编辑:
我还在play-framework Google Group(https://groups.google.com/forum/#!topic/play-framework/KcbiF9K3d8w)上发布了我的问题,并在那里收到了答案。 解决方案是选择一个名称:“角色[]”而不是“角色”。
弄清楚了。
解决方案是选择一个名称:“角色[]”而不是“角色”。
Java Play 2.3.7将Play Form
绑定到具有multiple
属性的select
示例:
<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; }
}
链接地址: http://www.djcxy.com/p/74871.html