Play框架2:从请求中绑定表单

6

我是Play2的新手(之前已经使用Play1开发了一个项目),在请求中绑定表单时遇到了问题。关于表单的文档非常简略。

这是我的控制器代码:

private final static Form<Estimation> estimationForm = form(Estimation.class);

/**
 * Get an estimation by form
 * @return
 */
public static Result estimation() {
    return ok(views.html.rate.estimation.render(
        estimationForm,
        City.findAll()
    ));
}

/**
 * Display estimation results
 * @return
 */
public static Result results() {
    if (request().method().equals("POST")) {
        Form<Estimation> form = estimationForm.bindFromRequest();
        if (form.hasErrors()) {
            System.out.println(form.errorsAsJson().toString());
            return ok(views.html.rate.estimation.render(
                form
                City.findAll()
            ));
        }
        else {
            System.out.println(form.get());
            return ok(views.html.rate.results.render(

            ));
        }
    }
    else {
        return estimation();
    }
}

我将下拉选择框中的城市显示为以下内容:

我在一个下拉选择框中显示城市:

<select id="city" name="city">      
    <option value="1">Paris, France</option>
    <option value="2">Lyon, France</option>
    <option value="3">Marseille, France</option>
    <option value="4">Barcelona, Spain</option>
    <option value="5">Berlin, Germany</option>
</select>

当我提交表单时,出现以下错误: {"city":["无效值"]}
所以我的问题是:绑定器似乎与简单字段(例如模型中的字符串属性)很好地配合使用,但是@ManyToOne关系怎么办?
谢谢。
1个回答

9

将选择字段的名称设置为name="city.id"


谢谢你的回答。我按照你说的修改了我的代码,但是并没有改善。当我打印form.toString()时,我得到了以下结果:Form(of=class models.analytic.Estimation, data={amount=125, city.id=1}, value=Some(null >> 125.0), errors={})但是当我尝试保存对象(form.get())时,我遇到了一个验证错误,提示City字段不能为空...你有什么想法吗?再次感谢你 ;) - c4k
抱歉,经过更多的调查,您的答案解决了我的问题。实际上,我尝试直接保存form.get()对象,但是在bean中有一个必填字段不在表单中,因此它的值始终为null。在保存实体之前,在控制器中设置了这个字段,我解决了这个问题(如果可以帮助其他遇到这个问题的人;) - c4k

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接