dug*_*tov 6 java playframework
我有一个Foo
带有两个属性和form
binder 的简单类:
import play.data.Form;
public class Foo {
public static Form<Foo> form = Form.form(Foo.class);
public String name;
public List<Bar> bars = new ArrayList<Bar>();
}
Run Code Online (Sandbox Code Playgroud)
哪个Bar
班级是:
public class Bar {
public String prop1;
public String prop2;
}
Run Code Online (Sandbox Code Playgroud)
当我尝试发出POST ajax请求时:
jsRoutes.controllers.Test.duh().ajax({
data: {
name: "Test",
bars: [{prop1: "first"}]
}
});
Run Code Online (Sandbox Code Playgroud)
在duh方法中,在线:
Form<Foo> request = Foo.form.bindFromRequest();
Run Code Online (Sandbox Code Playgroud)
我收到错误:
[InvalidPropertyException:bean类[models.Foo]的无效属性'bars [0] [prop1]':索引属性路径'bars [0] [prop1]'中引用的属性既不是数组也不是List也不是Map; 返回值是[第一]]
AJAX请求的表单数据如下所示:
name:Test
bars[0][prop1]:first
Run Code Online (Sandbox Code Playgroud)
问题:在play框架中绑定复杂元素列表的正确方法是什么?此代码还需要什么工作?
正如 @fjtorres 提到的,问题在于 jQuery.param 序列化数据的方式。Play 期望bars[0].prop1
而不是bars[0][prop1]
. 为了解决这个问题,我将代码更改为以下内容:
前端:
jsRoutes.controllers.Test.duh().ajax({
data: JSON.stringify({
name: "Test",
bars: [{prop1: "first"}]
}),
headers: {
"Content-Type": "application/json"
}
});
Run Code Online (Sandbox Code Playgroud)
后端 - 控制器:duh 方法:
Form<Foo> request = Foo.form.bind(request().body().asJson());
Run Code Online (Sandbox Code Playgroud)
这会将数据以 JSON 形式发送到后端。在后端JsonNode
从请求正文中检索并传递给表单bind
方法。
归档时间: |
|
查看次数: |
1731 次 |
最近记录: |