2016-12-09 46 views
0

我有以下型号:的Java播放2.5.10如何注入播放jongo

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"); 
} 

我输入一个静态/非静态引用上下文错误的循环。如果我删除所有静态声明,我无法致电Users.method。如果我尝试注入到用户控制器

public class HomeController extends Controller { 

    @Inject 
    public Users users; 
    . 
    . 

,并尝试调用用户方法:

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

我收到org.jongo.marshall.MarshallingException。 我的大脑肯定会过热,有人可以向我解释如何使用Play-jongo进行注射?

回答

0

我解决了这个问题。现在我有一个UsersRepository,它包含对mongo集合进行操作的方法(authenticate,addUser等)。而一个Users对象只包含实际的数据字段(名字,姓氏,电子邮件等)。

之后,我可以将UsersRepository注入到我的控制器中,并随处使用该实例。

感谢Greg Methvin,Tech Lead - Play Framework