【发布时间】:2019-08-27 08:26:02
【问题描述】:
我正在使用 Java Play 框架 2.6。我正在尝试提供对象列表(在本例中为章节)。每个章节对象都包含在一个 Map 字段中。用简单的方式来说明这一点:
public class ListChapters {
private List<Chapter> formChapters;
public List<Chapter> getFormChapters() {
return formChapters;
}
public ListChapters setFormChapters(List<Chapter> formChapters) {
this.formChapters = formChapters;
return this;
}
}
public class Chapter {
private String name;
private Map<String, Material> materials;
public String getName() {
return name;
}
public Chapter setName(String name) {
this.name = name;
return this;
}
public Map<String, Material> getMaterials() {
return materials;
}
public Chapter setMaterials(Map<String, Material> materials) {
this.materials = materials;
return this;
}
}
public class Material {
private String code;
public String getCode() {
return code;
}
public Material setCode(String code) {
this.code = code;
return this;
}
}
在模板中,我用一些值填充输入框(每章一行,地图中每个材料字段一行):
@repeatWithIndex(formChapters("formChapters"), min=chapters.size() ) { (field, index) =>
<tr>
<td><input type="text" class="form-control" name="@{field.name}.name" value="@chapters.get(index).getName()">@chapters.get(index).getName()</td>
</tr>
@for((key, material) <- chapters.get(index).getMaterials()){
<tr>
<td><input type="text" class="form-control" name="@{field.name}.materials.@{material.getCode()}.code" value="@material.getCode()">@material.getCode()</td>
</tr>
}
}
章节和表单章节作为参数传递给模板:
章节:列表[章节],表单章节:表单[列表章节]
现在 - 我正在努力弄清楚如何在提交时绑定表单以获得正确的值。
绑定请求的代码非常简单:
Form<ListChapters> chaptersForm = formFactory.form(ListChapters.class).bindFromRequest();
List<Chapter> formChapters = chaptersForm.get().getFormChapters();
问题在于 formChapters 正确地绑定了章节的名称 - 但是当涉及到材料时 - 它们都是空的。
用 Chrome 检查,表单数据发送如下:
formChapters[0].name: Some name
formChapters[0].materials.19931.code: 19931
formChapters[1].name: Some other name
formChapters[1].materials.6311231.code: 6311231
...
这不是形成输入名称的正确方法,所以绑定完成了吗?或者可能是什么问题?
非常感谢任何帮助。
【问题讨论】:
标签: java data-binding playframework