0

我从 Play 2.5 升级到 2.7,但在保存表单时遇到问题。当字段发生更改并且我调用 Model.update() 时,更改不会保留在数据库中(即使在更新完成之前调试时它们显示已更改)

但是,当我专门设置它们时,它们确实会持续存在。所以它必须做一些事情,因为它没有检测到变化并且没有看到对象发生了变化。我在模型中使用 getter 和 setter,所有属性都是私有的。

这是控制器功能(用两行来保持这两个字段)

@Check(UserTask.MANAGER)
public Result updateSceneSet(Http.Request request) {
    Messages messages = messagesApi.preferred(request);
    Form<StreamingSceneSet> form = formFactory.form(StreamingSceneSet.class).bindFromRequest(request);
    if (form.hasErrors()) {
        if (form.rawData().get("id") != null && form.rawData().get("id").length() > 0) {
            long itemId = Long.parseLong(form.rawData().get("id"));
            StreamingSceneSet item = StreamingSceneSet.findById(itemId);
            return badRequest(views.html.streaming.editSceneSetView.render(form, item, messages, request));
        } else {
            return badRequest(views.html.streaming.createSceneSetView.render(form,messages, request));
        }
    }

    // Form is OK, has no errors we can proceed
    StreamingSceneSet item = form.get();

    item.setName(item.getName());
    item.setDescription(item.getDescription());

    // Insert or update?
    if (item.getId() == null) {
        item.insert();
        flash("success", messages().at("addedSceneSet", item.getName()));
    } else {
        item.update();
        flash("success", messages().at("updatedSceneSet", item.getName()));
    }
    return redirect(routes.Streaming.sceneSets());
}
4

1 回答 1

0

似乎是因为当我开始升级时,我有一些遗留类,我没有 getter 和 setter,因为我遇到了一些问题,所以我输入了:

play.forms.binding.directFieldAccess = true

删除它使一切恢复正常。

于 2020-04-18T08:17:30.720 回答