3

我正在尝试在 play-authenticate 模块的 User 模型和我的模型 - Books 之间建立关系。我正在使用 play 2.0.4,并且我已将 play-authenticate 集成到我的项目中。在我的控制器/应用程序中,我有 getLocalUser 方法:

public static User getLocalUser(final Session session) {
    final User localUser = User.findByAuthUserIdentity(PlayAuthenticate
            .getUser(session));
    return localUser;
}

我正在尝试在我的 Books 模型中覆盖 Model 的方法来保存添加/修改图书记录的用户。

public void save() {
    User logged = Application.getLocalUser(session());
    if (logged != null) {
        this.createUser = logged;
        this.modifyUser = logged;
    }
    super.save();
}

public void update(Object o) {
    User logged = Application.getLocalUser(session());
    if (logged != null) {
        this.modifyUser = logged;
    }
    super.update(o);
}

我这样做时得到的错误是:

未定义 Books 类型的 session() 方法。

我不确定这是怎么回事,因为由于我的导入,我确实可以访问控制器/应用程序方法:

导入控制器。应用程序;

更新: *

public static Result createBook() {
        Form<Book> filledForm = bookForm.bindFromRequest();

        if(filledForm.hasErrors()) {
            return badRequest(
                views.html.bookCreator.render(Book.all(), filledForm)
            );
        }
        else {
            Book.create(filledForm.get());
                    //Book.save(getLocalUser(session()));
            return redirect(routes.Application.createSuccess());
        }
    }*
4

1 回答 1

2

首先,session()在模型类中调用是一个非常糟糕的主意,因为如果这样做,您将创建某种循环依赖关系(表示层 -> 模型 -> 表示层)。

如果您真的想保持这种方式,只需执行以下操作:

控制器:

public static User getLocalUser() {
    final User localUser = User.findByAuthUserIdentity(PlayAuthenticate
            .getUser(session()));
    return localUser;
}

模型:

public void save() {
    User logged = Application.getLocalUser();
    if (logged != null) {
        this.createUser = logged;
        this.modifyUser = logged;
    }
    super.save();
}

public void update(Object o) {
    User logged = Application.getLocalUser();
    if (logged != null) {
        this.modifyUser = logged;
    }
    super.update(o);
}

但我更愿意这样做:

控制器:

public Result anAction() {
    ...
    save(getLocalUser(session()));
    ...
}

模型:

public void save(final User logged) {
    if (logged != null) {
        this.createUser = logged;
        this.modifyUser = logged;
    }
    super.save();
}

public void update(Object o, final User logged) {
    if (logged != null) {
        this.modifyUser = logged;
    }
    super.update(o);
}
于 2013-03-31T19:12:14.863 回答