play.data.Form - 如何最好地填充默认表单值

时间:2014-07-23 03:13:35

标签: java forms playframework default-value playframework-2.2

尝试将过滤器表单添加到标准crud'list'页面。

// set filter defaults
ImageFilter defaultFilter = new ImageFilter();
defaultFilter.setYear(currentYear);
defaultFilter.setColor(user.getFavouriteColor());

// get filter for view
Form<ImageFilter> form = Form.form(ImageFilter.class).fill(defaultFilter).bindFromRequest();
ImageFilter filter = form.get()
  • bindFromRequest()单独获取一个表单,其中包含用户指定的过滤器,但在首次加载时,这些字段没有选定的值
  • fill(defaultFilter)确实提供了一个选择了默认过滤器的表单
  • 以这种方式链接的行为与最后一个行为的行为完全相同。

设置默认值的适当方法是什么?

理想情况下,在索引页面上:

  • 未给出任何参数时的默认过滤器选择
  • 如果请求使用?year = 2010&amp; color = blue,那些过滤器会显示在表单
  • 如果要求使用?year = 2010,则表单显示2010和用户最喜欢的颜色

2 个答案:

答案 0 :(得分:0)

检查是否存在默认值,然后选择流程。 如果不存在,则使用querystring params将其设置为过滤器或在UI上进行渲染。

答案 1 :(得分:0)

您可以通过将代码分成两个动作来实现您的目标。

在第一个表格中,您使用默认过滤器填写表格并将其显示给用户。

public static Result show() {
    ImageFilter defaultFilter = new ImageFilter();
    defaultFilter.setYear(currentYear);
    defaultFilter.setColor(user.getFavouriteColor());
    Form<ImageFilter> form = Form.form(ImageFilter.class).fill(defaultFilter);

    return ok(index.render(form));
}

在第二个操作中,您只需绑定请求中的表单值即可。如果用户更改某些值,则表单将填充它们以及设置为默认值的未更改值。

public static Result handle() {
    Form<ImageFilter> form = Form.form(ImageFilter.class).bindFromRequest();
    ImageFilter filter = form.get();
    return ok("TODO handle form");
}

修改

如果您想在用户输入后使用默认值填充缺少的字段而不在提交之前在视图中显示它们,我担心您必须在绑定后手动执行此操作。