0

私は次のモデルを持っています:

public class Users {

    public static PlayJongo jongo = Play.current().injector().instanceOf(PlayJongo.class);

    public static MongoCollection users() {
        return jongo.getCollection("DB.users");
    }
..
..

public static Users authenticate(String email, String password) {
        Users user = users().findOne("{email: #, removed: false}", email).as(Users.class);

        if (user != null) {
            if (HomeController.checkPassword(password, user.password)) {
                return user;
            }
        }

        return null;
    }
..

私はそれをコントローラーで次のように使用します。

public Result authenticate() {
        DynamicForm requestData = Form.form().bindFromRequest();
        String email = requestData.get("email").trim();
        String password = requestData.get("password").trim();
        Users user = Users.authenticate(email, password);
        if (user == null) {
            flash("danger", "Incorrect email or password.");
            return redirect(routes.HomeController.login());
        }
        session("email", user.getEmail());
        session("role", user.getRole());
        session("fullname", user.getLastname() + " " + user.getFirstname());
        session("id", user.getId().toString());

        return redirect(routes.HomeController.index());
    }

play-jongo でインジェクションを使用するために多くの組み合わせを試しましたが、結果はありませんでした。例えば

@Inject
public  PlayJongo jongo;

public  MongoCollection users() {
          return jongo.getCollection("DocBox.users");
}

静的/非静的参照コンテキスト エラーのループに入ります。すべての static 宣言を削除すると、Users.methodを呼び出すことができなくなります。ユーザーをコントローラーに注入しようとすると

  public class HomeController extends Controller {

  @Inject
  public Users users;
  .
  .

そして、Users メソッドを呼び出してみます。

   Users user = users.authenticate(email, password);

org.jongo.marshall.MarshallingException を受け取りました。私の脳は間違いなく過熱しています。だれかが play-jongo でインジェクションを使用する方法を説明してくれませんか?

4

1 に答える 1

0

問題を解決します。これで、mongo コレクション (authenticate、addUser など) で動作するメソッドを含む UsersRepository ができました。そして、実際のデータフィールド (名、姓、電子メールなど)のみを含むユーザー オブジェクト。

その後、UsersRepository をコントローラーに挿入して、その 1 つのインスタンスをどこでも使用できます。

Greg Methvin、Tech Lead - Play Framework に感謝

于 2016-12-15T11:53:43.243 に答える