我正在玩Play! java项目上的框架20,我将表单传递给视图时遇到问题。
在控制器中,我有以下代码:
Filter filter = new Filter();
//add some state to the filter object
Form<Filter> filterForm = form(Filter.class).fill(filter);
Logger.info("FilterForm: " + filterForm.get().toString()); // So far so good
return ok(filterView.render(filterForm));
在模板中:
@filterForm.hasErrors() // renders false
@filterForm.data().isEmpty() // renders true!!
@* @filterForm.get().toString() *@ throws an Exception: No Value
如果在控制器中我通过Map填充过滤器状态,我也会得到相同的错误:
filterForm = filterForm.bind(aMapWithTheState);
仅当在代码中填充过滤器时才会出现此行为。当我在其他方法中filterForm.bindFromRequest()
时,一切正常。
谢谢!
答案 0 :(得分:0)
解决。
我必须使用表单的bind
方法,使用我之前使用状态的地图。但正确的方法是传递属性名称:
Map<String, String> formState = new HashMap<String, String>();
formState.put("name", name);
formState.put("birthDate", birthDate);
formState.put("address", address);
filterForm = filterForm.bind(formState, "name", "birthDate", "address");
尽管documentation表示属性名称不是强制性的。